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

标签 ruby methods setter indexer

我正在尝试编写一个方法,该方法充当 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/

相关文章:

ruby : "if !object.nil?"或 "if object"

ruby-on-rails - 如何在 Paperclip 中制作条件样式?

javascript - 我无法使用在同一对象内创建的方法来修改对象的属性。我正在尝试使用 foreach 然后 console.log 未定义

java - 从 Modelclass 层次结构的顶层调用 setter

java - Lombok @Data 注释将字段名称从 isood 更改为 good

Python setter 也返回一个值

ruby - Ruby 中的 charCodeAt() 等价物

ruby-on-rails - 如何在 Rails/Ruby 中获取包含哈希值的完整 URL

java - 如果只有主线程,是否必须同步任何方法?

java - 如何将两个数组放入迭代器中逐步进行?