【发布时间】:2010-10-18 23:37:07
【问题描述】:
更新
我正在设计一种实验性编程语言,问题是是否包含闭包或仅使用一流函数。为了决定这一点,我需要现实的用例/示例来展示闭包优于一流函数的好处。我知道你可以实现一切,你可以用两个没有它们之一来实现,但是有几个用例,例如代码更易于阅读的一流功能(例如更短或不分为多个类)。例如:
鲁比:
[1,5,7].map{|x| x*x }
[1,'test',3].select{|x| x.kind_of? Integer}.map{|x| x.to_s }
big_array.each{ |item| puts item }
如果没有一流的函数,这些示例会更加冗长,因为您将不得不使用 for 循环或类似的东西。
现在,哪些用例显示了闭包的用处?尽管我经常使用一流的函数,但我真的想不出好的闭包用例。你有什么好的闭包用例吗?
原帖
我不明白为什么闭包绑定到变量,而不仅仅是值,例如:
鲁比:
x = 5
l = lambda { x }
l.call #=> 5
x = 100
l.call #=> 100
引用变量而不是仅仅在定义闭包时引用存储在变量中的值有什么用?就像在这个例子中一样:
鲁比:
x = 5
l = lambda { x }
l.call #=> 5
x = 100
l.call #=> 5, not 100
是否存在需要在定义闭包时引用 变量 而不仅仅是这些变量的 值 的良好用例?
【问题讨论】:
标签: binding closures environment use-case