Ruby 红宝石:I';我在调用一个方法时不知何故给了它一个参数,但是不要';我不知道在哪里。我认为这与块绑定有关?

Ruby 红宝石:I';我在调用一个方法时不知何故给了它一个参数,但是不要';我不知道在哪里。我认为这与块绑定有关?,ruby,binding,block,splat,Ruby,Binding,Block,Splat,为不知道如何更好地陈述这个问题而道歉 我注意到{}的块语法是如何立即绑定到左边的对象的,然后注意到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 令人困惑的是

为不知道如何更好地陈述这个问题而道歉

我注意到{}的块语法是如何立即绑定到左边的对象的,然后注意到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 {}  
解析器将{紧密地绑定到它前面的标记上。如果省略方法参数周围的括号,则一个大括号块将与最后一个参数关联——可能是不需要的