我正在尝试编写一个方法,该方法充当 setter 并在分配的值之外采用一些额外的参数。愚蠢的例子:
class WordGenerator
def []=(letter, position, allowed)
puts "#{letter}#{allowed ? ' now' : ' no longer'} allowed at #{position}"
end
def allow=(letter, position, allowed)
# ...
end
end
将它写成索引器是可行的,我可以这样调用它:
gen = WordGenerator.new
gen['a', 1] = true
# or explicitly:
gen.[]=('a', 1, true)
但是当我尝试以下任一操作时,解释器会提示:
gen.allow('a', 1) = false # syntax error
gen.allow=('a', 1, false) # syntax error
为什么这行不通,我是不是错过了显而易见的东西?
最佳答案
它不起作用,因为解析器不允许它。 identifier = expression
、expression.identifier = expression
(其中标识符为 \w+
)、expression[arguments] = expression
和 expression.[]= arguments
并作为字符串或符号或字 rune 字 (?=
) 的一部分。就是这样。
gen.send(:allow=, 'a', 1, false)
会起作用,但此时您也可以只给该方法一个不包含 =
。
关于ruby - 在 Ruby 中创建一个接受额外参数的 setter 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2380796/