我可以将多个参数传递给Ruby中的重载运算符吗?

时间:2013-09-06 19:48:10

标签: ruby

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

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

1 个答案:

答案 0 :(得分: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。这就是你得到错误的原因。