以下代码使用:
send("#{duck1}=", true)
我尝试了以下代码,并想知道为什么它没有工作:
duck1.send(=,true)
终端显示:syntax error, unexpected '=', expecting ')'
答案 0 :(得分:2)
在我们进入send
方法的有效参数类型之前,请先查看错误消息。它告诉你,在该左括号之后立即有一个“裸”等号的语法错误。所以,马上,你知道有些事情是非常错误的。
现在,如果你仔细看看做工作的电话,你会发现你正在传递字符串“something =”,而不是“裸”等于标志。根据{{1}}所采用的参数类型, 有机会工作。
如果您阅读send
的文档,您会看到第一个参数可以是字符串或符号。 send
将被插值为字符串,因此有效。
现在,问题变成了,“"#{duck1}="
是什么,duck1
将内插到现有函数的名称?我无法回答它,它完全取决于"#{duck1}="
的价值。
答案 1 :(得分:0)
send
的第一个参数必须是符号或表示方法名称的字符串。 =
不是符号或字符串。它甚至不是一个对象。此外,即使您执行send(:"=", ...)
或send("=", ...)
,除非您以非常规方式将=
定义为方法,否则它将无效。 (编辑关注Bob Gilmore和JörgWMittag的评论)