1.upto(9) { |x| print x }
为什么这不起作用?
{ print x |x} }
y
怎么样?
答案 0 :(得分:7)
这是传递给您的块的参数。例如,在您的示例中,upto
会使用1到9之间的每个数字来调用您的块,并且当前值可用x
。
块参数可以具有任何名称,就像方法参数一样。例如1.upto(9) { |num| puts num }
有效。
就像方法的参数一样,您也可以为块提供多个参数。例如
hash.each_pair { |key, value| puts "#{key} is #{value}" }
答案 1 :(得分:2)
垂直线用于表示块的参数。该块是{}中包含的代码。这实际上是ruby块的语法,块的参数然后是代码。
答案 2 :(得分:1)
这不是运营商;它正在划分块的参数列表。条形相当于def foo(x)
中的条形图。由于与此相同的原因,您无法将其写为{print x |x}
:
def foo(x)
puts "It's #{x}"
end
不能改写为:
def foo
puts "It's #{x}" (x
end
答案 3 :(得分:0)
在您指定的代码段中,垂直线是块定义语法的一部分。因此{ |x| print x }
是作为upto
方法的参数提供的代码块,9
也是传递给upto
方法的参数。
代码块由Ruby中的lambda
或类Proc
的对象表示。在这种情况下,lambda
是一个匿名函数。
所以只是为了对函数定义语法进行类比,
def function_name(foo, bar, baz)
# Do something
end
{ # def function_name (Does not need a name, since its anonymous)
|x| # (foo, bar, baz)
print x # # Do Something
} # end