有人能给我解释一下Ruby在块中使用管道字符吗?我知道它包含一个变量名,在数据迭代时,该变量名将被分配给数据.但这叫什么?管道内部是否有多个变量?还有什么我应该知道的吗?有关于它的更多信息的好链接吗?

例如:

25.times { | i | puts i }

推荐答案

大括号定义了一个匿名函数,称为块.管道之间的标记是该块的参数.参数的数量取决于块的使用方式.每次计算块时,需要该块的方法将根据调用它的对象传递一个值.

这与定义方法相同,只是它不会存储在接受块的方法之外.

例如:

def my_print(i) 
  puts i
end

执行时将执行与此相同的操作:

{|i| puts i}

唯一的区别是块是动态定义的,而不是存储的.

例2:

25.times &method(:my_print)

25.times {|i| puts i}

我们使用匿名块,因为作为块传递的大多数函数通常特定于您的情况,不值得定义以供重用.

那么,当一个方法接受一个块时会发生什么呢?这取决于方法.接受块的方法将通过以定义良好的方式从其调用对象传递值来调用它.返回的内容取决于需要该块的方法.

例如: In 25.times {|i| puts i} .times calls the block once for each value between 0 and the value of its caller, passing the value into the block as the temporary variable i. Times returns the value of the calling object. In this case 25.

让我们看一看接受带有两个参数的块的方法.

{:key1 => "value1", :key2 => "value2"}.each {|key,value| 
     puts "This key is: #{key}. Its value is #{value}"
}

在这种情况下,每个函数都 for each 键/值对调用块函数,将键作为第一个参数传递,将值作为第二个参数传递.

Ruby相关问答推荐

Ruby插值法导致无序输出

如何在 Ruby 中反转数字的字节顺序

如何在 Ruby 中正确编写代码?以便它产生正确的输出?

Rb:仅通过在 Ruby 中的类上添加 each 方法,可枚举模块是如何工作的?

为什么 Rake 不能连续调用多个任务?

获取字符串中的最后一个字符

如何在 ruby​​ 中列出当前范围内的当前可用对象?

如果浮点组件不是 .00 sprintf/printf,则仅显示小数点

你喜欢哪种风格的 Ruby 字符串引用?

在 Ruby 中将多个代码块作为参数传递

在 OSX 10.10 Yosemite 上安装 Nokogiri

删除/取消定义类方法

Ruby 中的文件打开模式

如何修复错误的 URI 不是 URI

如何在没有警告的情况下重新定义 Ruby 常量?

何时在 Ruby 中使用 `require`、`load` 或 `autoload`?

从数组 Ruby 中删除元素

正则表达式中的 `?i` 和 `?-i` 是什么意思?

在 Ruby 中创建二维数组和访问子数组

如何在 Ruby 中实现回调?