在 Ruby 中:我在调用方法时以某种方式给它一个参数,但不知道在哪里。我认为这与块绑定有关?



很抱歉不知道如何更好地陈述这个问题。

我注意到{}的块语法如何立即绑定到左边的对象,然后注意到do/end绑定到开始行的对象。在这个过程中,我注意到:

def a(*)
  puts "a: #{block_given?}"
end
def b 
  puts "b: #{block_given?}" 
end
a b {}
#=> b: true
#=> a: false
a b do end  
#=> b: false
#=> a: true

令人困惑的是,我不需要方法'b'上的(*)运算符(或任何参数),并且两个方法调用行都会导致相同的错误。

我只是不确定发生了什么,如果我在方法"a"中没有(*)参数,那么它会说"0的参数数1错误",但我传递的参数是什么?为什么只给"a"?

a b {}       # a(b{})
a b do end   # (a(b)) do end
a(b do end)  # behaves like a b {}  

语法分析器{紧密地绑定到它前面的标记。如果省略方法参数周围的括号,则大括号块将与最后一个参数关联,这可能是不需要的。

相关内容

  • 没有找到相关文章

最新更新