繁体   English   中英

为什么我们不能将带有其他参数的{}块传递给Ruby中的方法

[英]Why can't we pass a {} block with other parameters to a method in Ruby

当使用其他参数将块传递给使用ruby的方法时,为什么我们必须这样做

def method4(condition, attribute, &block)
    return "No Block" if block.nil?
    if condition
        block.call
    end
    puts attribute
end


method4(true,4) do
  puts "Hello World"
end

虽然我们不能那样做

method4(true,4,{puts "Hello World"})

显然后者在语法上是错误的

您只能将其他对象作为参数传递,而块不是Ruby中的对象。 块是句法构造。

但是它们可以轻松地包装在Proc类的对象中。 甚至还有一个特殊的速记运算符:

method4(true, 4, &->{puts 'Hello World'})

上面的代码的简短说明:

->{}在给定的块周围创建一个Proc对象。 由于method4需要一个块而不是一个对象,因此您需要“解开”它以再次阻止,这就是与号存在的原因。 如果改为method4的签名:

def method4(condition, attribute, proc) # note no ampersand

您也可以在方法调用中省略“&”号。

调用带块方法的正确语法是method_name(arguments) { stuff() }

method4(true,4,{puts "Hello World"}) ,花括号会给您带来语法错误,因为它可能是Hash对象,例如: method4(true, 4, {puts: "Hello World"})

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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