繁体   English   中英

块的目的是什么?

[英]What is the purpose of blocks?

我刚开始使用红宝石,无法将头缠在块上

它与匿名函数有何不同?

我想在什么情况下使用它?

我什么时候会选择使用匿名函数呢?

Ruby没有像JavaScript 这样的匿名函数。 积木有3种基本用途:

  1. 创建Proc小号
  2. 创建lambda
  3. 具有功能

此处的块类似于匿名函数的示例(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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM