アプリ版:「スタンプのみでお礼する」機能のリリースについて

Proc.new do|arg|
 arg.each do |x|
  puts x
 end
end.call([1,2,3,4,5])
上記のようなものを無名関数と理解しているのですが、
これを下記の様にすると、
Proc.new {|arg|
 arg.each do |x|
  yield(x)
 end
}.call([1,2,3,4,5]) do |x|
 puts x
end

no block given

とエラーになってしまいます。

無名関数で、ブロック付きメソッドって作れないものでしょうか?

ご指導の程、宜しくお願いいたします。

A 回答 (4件)

lambda do |arg, &block|


 arg.each do |x|
  block.call(x)
 end
end.call([1,2,3,4,5]) do |x|
 puts x
end


こんな感じでどうでしゅうか?Proc.newの変わりにlambda使ってますが、procでも同じです。
    • good
    • 0

何度もすいません。

追記です。
Proc.new=lambda=proc見たいな感じでつかってしまいまいたが、
細かい挙動は違いますので注意してください。
誤解を与えそうだったので・・・。

↓以下を参考にして下さい。
Ruby Proc.newとlambdaの違い(追記) - ソースコード備忘録
http://d.hatena.ne.jp/yuki_rinrin/20090831/12517 …

参考URL:http://d.hatena.ne.jp/yuki_rinrin/20090831/12517 …
    • good
    • 0
この回答へのお礼

toby_jpさん、ご回答有難うございました。

Proc.newとlambdaの挙動の違い、頂いた参考ページなどで
確認しておきます。

ご丁寧にありがとうございました。

お礼日時:2009/09/11 14:47

書き忘れてました。



コードが、ちょっと不自然な感じがする?ので、
もしよければどんなことがしたいか言っていただいたほうがいいかもしれません。
もっとスマートな方法が見つかるかと思います。
    • good
    • 0

Ruby1.9ならブロック引数(&block)を明示してcallすればできます。



Proc.new {|arg, &block|
arg.each do |x|
block.(x)
end
}.([1,2,3,4,5]) do |x|
puts x
end
    • good
    • 0
この回答へのお礼

ryu_chanさん、ご回答有難うございます。

知らいない文法なので、まだ感覚的に馴染めませんが、
勉強になりました。

お礼日時:2009/09/11 14:45

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!