2012-09-07 51 views
3

我发现了这个我想理解的怪异。如果我定义撬这两种方法...ruby​​ * args语法错误

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

他们都work.But如果我把一个模块在上面的代码,并包括了另一类模块(比如,类工作),下面

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) 

因此,它看起来像模块内部,用'='定义的方法总是期望一个参数。这对我来说没有意义。

我在想什么

回答

2

解析Ruby解释器。尝试

j.send :test=, 1, 2, 3 
+0

以上的产率“未定义的方法'测试=”为#<作业:0x007fdd3c844498> “ – Paul

+0

尝试j.methods.include?(:test =)。 –

2

使用直接

j.test = 1,2,3 

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

或`

j.send('test=',[1,2,3]) 
+0

嗯,我已经看到了如何使用它,但为什么'test ='从pry命令行工作,而不是在模块中使用?这是Ruby中的错误,还是我的一些基本误解? – Paul

+0

我告诉过你:解析Ruby解释器。抱怨Ruby bug报告网站http://bugs.ruby-lang.org/ –