タグ

ブックマーク / rubyco.hatenadiary.org (6)

  • 疑問:特異クラスの構文の不思議 - rubyco(るびこ)の日記

    Rubyの特異クラスは以下のように書きます。 class <<obj # ... end ここで、"<< obj"という構文で、特異メソッドを定義するために「objという特定のインスタンスに固有なクラス」を仮想的に指定しています。これが特異クラスです。 ところで、どうして "<< obj"という構文なのだろう? というのが疑問です。いや、もちろんただの構文といえば構文なのですが、ここで不等号をこういう風に使う積極的な理由がよくわからなかったのです。 たとえば、Rubyでは、クラスの継承関係は"Child < Parent"と表現しますね。そうすると、不等号の開いているほうが継承関係でルートに近い。 継承関係と、クラス・インスタンスの関係は別なので、継承関係は "<" で、クラス・インスタンスの関係は "<<" で表現することにすると、"特異クラス << インスタンス" よりも "インスタン

    疑問:特異クラスの構文の不思議 - rubyco(るびこ)の日記
    yugui
    yugui 2006/12/26
  • superを使わずにスーパークラスのメソッドを呼び出す - rubyco(るびこ)の日記

    サブクラスから自身がオーバーライドしたスーパークラスのメソッドを呼びたいときを読んで、私もやってみました。 class Mother def hello puts "Mother#hello" end end class Rubyco < Mother alias :xxx_hello :hello def hello puts "Rubyco#hello" end def mother_hello xxx_hello end end Rubyco.new.hello #=> Rubyco#hello Rubyco.new.mother_hello #=> Mother#helloほんとだ。superはスーパークラスの同名のメソッドのaliasなんだそうです。ふうん。 superを使うと、スーパークラスの同名のメソッドを呼び出してしまうので、Rubyco#mother_helloからMot

    superを使わずにスーパークラスのメソッドを呼び出す - rubyco(るびこ)の日記
    yugui
    yugui 2006/12/01
    aliasじゃないと思ったが。たぶん、別名であってRubyのaliasじゃないと思う。
  • Colorize Test::Unit result - rubyco(るびこ)の日記

    http://subtech.g.hatena.ne.jp/youpy/20060818/p1 コンソール版のTestRunnerに色を付ける。コマンドラインなあなたにもグリーンバーを。 ところで、このプログラムを説明するとき、 Term::ANSIColorをmixinし output_singleとoutputをオーバーライドしている というのは正しい説明でしょうか。それとも、 Term::ANSIColorをmixinし output_singleとoutputを再定義している というべきでしょうか? > 誰にともなく 「オーバーライド」と「再定義」の用語の定義の話。『Rubyリファレンスマニュアル』を見ているとオーバーライドという表現は出てきていないようですが。

    Colorize Test::Unit result - rubyco(るびこ)の日記
    yugui
    yugui 2006/08/29
    コンソール版のTestRunnerに色を付ける
  • 冴子先生で素数 - rubyco(るびこ)の日記

    id:kkkkkkkkさんとartonさんのを見て「冴子先生で素数」を作りました。作ったといっても大半はartonさんのを写しただけですけれど…。 http://d.hatena.ne.jp/kkkkkkkk/20060620/p1 http://arton.no-ip.info/diary/20060525.html#p01 #!/usr/local/bin/ruby -Ks require 'win32ole' class Agent PATH = "C:\\Program Files\\Microsoft Office\\OFFICE10\\SAEKO.ACS" def initialize(path=PATH) agent = WIN32OLE.new("Agent.Control") agent.connected = true r = agent.Characters.load

    冴子先生で素数 - rubyco(るびこ)の日記
  • 仮想的な無限列(3) - rubyco(るびこ)の日記

    昨日の続きで、無限列を考えています。zipの意味を変えて少し整理しました。 class Sequence < Proc def self.create(*a, &block) self.new(&block).define(*a) end def define(*a) lambda { return a[0], self.call(self, *a) } end end class Proc def to_s(n=10) return "..." if n == 0 x, xs = self.call() x.to_s + ", " + xs.to_s(n - 1) end def drop(n) return self if n == 0 _, s = self.call() s.drop(n - 1) end def zip(s, t) x, xs = s.call() y, ys =

    仮想的な無限列(3) - rubyco(るびこ)の日記
  • フィボナッチ数列、もっと - rubyco(るびこ)の日記

    おとといのフィボナッチ数列の続きです。id:sumimさんが、call/cc を使ったコルーチンもどきでフィボナッチ数列という楽しいプログラムを書いていらしたので、便乗させていただきました。 違うところは、callccで保存する環境を直接ローカル変数にしたのと、あちこちリネームしたのと、元のresumeというprocをインライン展開したのと、unlessを修飾子にした点です。 fib_loopのほうはフィボナッチ数列を作り出す無限ループになっていて、fib_nextを呼び出す20.timesのループと協調しながら(コルーチン的)動いています。 # Based on http://d.hatena.ne.jp/sumim/20060417/p1 continue = output = nil fib_loop = proc {|a, b| loop { callcc {|continue|

    フィボナッチ数列、もっと - rubyco(るびこ)の日記
  • 1