From: hattorihiroaki1@... Date: 2011-01-05T09:24:35+09:00 Subject: [ruby-dev:42937] Re: Proc#callの別名の提案 服部裕暁です。 > 関数オブジェクトってなんですか? Procオブジェクトのことです。私自身が関数型言語とオブジェクト指向言語の融合に興味があったので そういう言葉をつくってしまいました。 > あと、&はすでに使われていますよ。 > http://rurema.clear-code.com/1.9.2/doc/spec=2fcall.html#block > > irb(main):001:0> def a; yield; end > irb(main):002:0> def b(&block); block.call; end > irb(main):003:0> a { 1 } #=> 1 > irb(main):004:0> b { 1 } #=> 1 > irb(main):005:0> a(&(->{2})) #=> 2 > > ブロックが必要なメソッドで、ブロックのかわりに最後の引数にProcやLambdaオブジェクトの手前に&をつけると > それがブロックとして処理されます。 > あとは同じメソッド側の引数リストに&をつけるとProcとしてブロックを受けとることができます。 これは知りませんでした。コードまで示していただきましてありがとうございます。 > というよりProc#call以外にProc#[]があります。それじゃだめなんですか? > まえからおもっていたんですけれど いま自分で言語の設計の(まねごとですが)しているのですが、今となってはProc#[]でも悪くないと思えるようになりました。 ただ、Rubyの括弧なしの呼び出しがとてもすばらしいと思うので、欲がでて提案してしまいました。