gpt4 book ai didi

ruby - 在 Ruby 中创建一个接受额外参数的 setter 方法

转载 作者:数据小太阳 更新时间:2023-10-29 06:33:19 26 4
gpt4 key购买 nike

我正在尝试编写一个方法,该方法充当 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 = expressionexpression.identifier = expression(其中标识符为 \w+)、expression[arguments] = expressionexpression.[]= arguments 并作为字符串或符号或字 rune 字 (?=) 的一部分。就是这样。

gen.send(:allow=, 'a', 1, false) 会起作用,但此时您也可以只给该方法一个不包含 =

关于ruby - 在 Ruby 中创建一个接受额外参数的 setter 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2380796/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com