3

我发现了我想了解的这种奇怪之处。如果我在 pry 中定义这两种方法...

def test(*args)
   puts args
end
def test=(*args)
    puts args
end

它们都可以工作。但是如果我将上面的代码放在一个模块中并将该模块包含在另一个类(例如 Job 类)中,则以下内容

j=Job.last
j.test=(1,2,3)

引发以下错误...

SyntaxError: (irb):3: syntax error, unexpected ',', expecting ')'
j.test=(1,2,3)
          ^

以下工作按预期...

j.test=[1,2,3]
j.test=(1)

因此,看起来在模块内部,使用“=”定义的方法总是需要一个 arg。这对我来说没有意义。

我错过了什么

4

2 回答 2

2

Ruby 解释器的解析。尝试

j.send :test=, 1, 2, 3
于 2012-09-07T13:28:48.440 回答
2

直接使用

j.test = 1,2,3

或者

j.test= ([1,2,3])

或`

j.send('test=',[1,2,3])  
于 2012-09-07T13:29:44.337 回答