2
class Test

  def << (*args)
    print "I got #{args.size} parameters.\n" 
  end

end

这有效:

t = Test.new
t << 5

这不起作用:

t = Test.new
t << 5,10

但这确实有效:

t = Test.new
t.<< 5,10

为什么第二种情况不起作用?不应该等同于第三种情况吗?

4

1 回答 1

4

有用 :-

class Test
  def << (*args)
    print "I got #{args.size} parameters.\n" 
  end
end
t = Test.new
t << [5,10]
# >> I got 1 parameters.
t << (5..10)
# >> I got 1 parameters.

为什么第二种情况不起作用?

然后你必须以数组格式传递它(意味着你只需要传递一个对象作为参数)。您的第二个因operator precedence. <<那么有更高的优先级,。所以你的表达式t << 5,10变成了(t << 5),10。这就是你得到错误的原因。

于 2013-09-06T19:51:03.967 回答