【发布时间】:2011-02-28 08:38:54
【问题描述】:
Ruby 中的块是什么意思?它看起来与 Smalltalk 相似,但您不能向它发送消息。
例如在smalltalk中:
[:x | x + 3] value: 3
返回 6。但在 ruby 中:
{|x| x + 3}.call 3
会导致语法错误。
不过,您可以在 ruby 中将消息传递给 lambda:
irb(main):025:0> ->(x){x+3}.call 3
=> 6
那么在 Ruby 中,block 不是 block,而 lambda 是 block?这是真的?我的意思是,ruby lambda 和 smalltalk 块之间有什么区别吗?如果这是真的,那么什么是红宝石块?
更新:
从下面的评论和答案,再加上一些谷歌搜索,我想我 对 Ruby 块有更多的了解。在 Ruby 中,通常一段代码计算一个值,每个值都是一个对象。但是,块不评估值。所以它不是一个对象。相反,它可以充当对象的部分。例如,在 {|x| x + 3} 可以作为对象 proc {|x| 的一部分x + 3 }。
但这确实让我感到困惑。在 smalltalk 中,几乎每个表达式都可以划分为对象(绑定到变量是例外)。似乎在 Ruby 中,还有更多的例外。
【问题讨论】:
-
我相信你错过了收益。不过,我对积木不是很了解..
-
感谢您指向产量。我发现了这个相关的问题:stackoverflow.com/questions/764134/…