我是ruby的新手,在学习它的同时,我不理解lambdas或procs的概念。我知道lambda和proc是绑定到一组局部变量的代码块。但我不明白它们的用途。
所以
程序员从中获得了什么优势?
我过去曾问过这个问题并被标记为重复,并且给出了一个完全无关的答案,所以请在将其标记为重复或责骂我之前请先查看其他链接的答案。
答案 0 :(得分:0)
这是一个广泛的问题。你基本上要问"闭包为什么重要?"。我想到的两个用途是:
免责声明:我实际上并没有运行任何此类代码,但它应该明白这一点。
延迟执行代码。如果我想传递一些代码作为回调(例如Rails' after_create
),我可以使用一个闭包来" hook"通过一个块进入Rails。该块具有当前类的上下文,但在Rails这样说之前它不需要运行。
class SuperClass
def self.after_create(&block)
@__after_create = block
end
def self.create
# do normal create logic
instance = self.new
if @__after_create
@__after_create.call(instance)
end
end
end
class MyClass < SuperClass
after_create {|instance| instance.log}
def log
puts 'hello world!'
end
end
MyClass.create
将函数作为参数传递。这样可以更容易地执行诸如编写通用树遍历算法之类的操作,该算法只将树的每个节点传递给某个函数:
def Tree.elements
["hello", "world!"]
end
def Tree.traverse(&block)
elements.each {|el| block.call(el)}
end
Tree.traverse {|el| puts el} # "hello" "world!"
Tree.traverse {|el| puts el.size} # "5" "6"