パスワードを忘れた? アカウント作成
733796 journal

kaihou999の日記: Visitor

日記 by kaihou999

 どなたかがRubyでVisitorがどのように実装されているか…という
話をしていたのですが、手元にデザインパターンの本が無かったので、
自宅に帰って確認してしまいました。
 しかし…アレは誰だったんでしょう。お心当たりの方、メールで
名乗り出て頂くとうれしいのですが…。

 以前、「オペレータを加える」の意味がわからなくて、Visitorは
外部Iteratorだ…と勘違いしてましたが、今回、ちょっと考えたら、
それは間違いだと気づきました(苦笑
 そんな調子ですから、間違っているかもしれませんし、また、全ての
人の日記を読んでないので、どなたかが答えているかも知れませんが。

 閑話休題。
 RubyでVisitorがeachと表現されていて、あれ? っと思ったとの
事ですけども、Rubyではeach内の操作は、yieldで行っています。
value.each{|x, y, z ...|
    ...
}
のような形です。
 さて、これはどう実装するかというと、
class Klass
    def each()
        ....
        yield x ....
        ....
    end
end
という形です。
 ここで、yieldがどういう動きをするかというところが、今回の
主題になるかと思うのですが、yieldはただ単に、複数の引数を渡して
Iteratorを実現させるだけでなく、その戻り値なるものを取得できる
ようになっています。

class Klass
    ....
    def each()
        ....
        a = yield(x ....)
        ....
    end
    ....
end

a = Klass.new
a.each{|x ...|
    x * 2
}

 こんな形で、分かりにくいですが、perlで $_ に突っ込むときにやる
方法と同じ手法で、戻り値を指定します。

 とまぁ、簡単で具体的な話だけでおわらしてしまったのですが、Ruby
でのEachなどの使い方、こんな方法もあるということで。

typodupeerror

あつくて寝られない時はhackしろ! 386BSD(98)はそうやってつくられましたよ? -- あるハッカー

読み込み中...