Ruby方法#send

时间:2014-02-25 05:00:39

标签: ruby

以下代码使用:

send("#{duck1}=", true)

我尝试了以下代码,并想知道为什么它没有工作:

duck1.send(=,true)

终端显示:syntax error, unexpected '=', expecting ')'

2 个答案:

答案 0 :(得分:2)

在我们进入send方法的有效参数类型之前,请先查看错误消息。它告诉你,在该左括号之后立即有一个“裸”等号的语法错误。所以,马上,你知道有些事情是非常错误的。

现在,如果你仔细看看工作的电话,你会发现你正在传递字符串“something =”,而不是“裸”等于标志。根据{{​​1}}所采用的参数类型, 有机会工作。

如果您阅读send的文档,您会看到第一个参数可以是字符串或符号。 send将被插值为字符串,因此有效。

现在,问题变成了,“"#{duck1}="是什么,duck1将内插到现有函数的名称?我无法回答它,它完全取决于"#{duck1}="的价值。

答案 1 :(得分:0)

send的第一个参数必须是符号或表示方法名称的字符串。 =不是符号或字符串。它甚至不是一个对象。此外,即使您执行send(:"=", ...)send("=", ...),除非您以非常规方式将=定义为方法,否则它将无效。 (编辑关注Bob Gilmore和JörgWMittag的评论)