在Ruby中,垂直线是什么?

时间:2010-08-23 08:33:02

标签: ruby

1.upto(9) { |x| print x }

为什么这不起作用?

{ print x |x} }

y怎么样?

4 个答案:

答案 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