[英]What is the purpose of blocks?
我刚开始使用红宝石,无法将头缠在块上
它与匿名函数有何不同?
我想在什么情况下使用它?
我什么时候会选择使用匿名函数呢?
Ruby没有像JavaScript 这样的匿名函数。 积木有3种基本用途:
Proc
小号 此处的块类似于匿名函数的示例(Ruby和JavaScript)。
红宝石:
[1,2,3,4,5].each do |e| #do starts the block
puts e
end #end ends it
JS(jQuery):
$.each([1,2,3,4,5], function(e) { //Anonymous *function* starts here
console.log(e);
}); //Ends here
Ruby块(和匿名函数)的强大之处在于它们可以传递给任何方法(包括您定义的方法)。 因此,如果我想要自己的每种方法,可以按以下步骤进行:
class Array
def my_each
i = 0
while(i<self.length)
yield self[i]
i+=1
end
end
end
例如,当您声明这样的方法时:
def foo(&block)
end
block
是一个Proc
对象,表示传递的块。 所以Proc.new
可能看起来像这样:
def Proc.new(&block)
block
end
必要时,将块绑定到方法。 它们只能通过如上所述的方法变成对象。 尽管我不确定lambda
的确切实现(它会执行额外的arg检查),但这是相同的想法。
因此,块的基本思想是:与方法绑定的代码块可以通过&
参数包含在Proc
对象中,也可以由yield
关键字调用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.