红宝石等于方法总是返回参数值而不是返回值

时间:2019-01-30 11:53:04

标签: ruby

我的问题是,赋值时可以修改我的值,但是#bar=返回的值将不是我的隐式返回值之一,而是value参数。

class Foo
  def bar=(value)
    @bar = "these not the droids you are looking for"
  end

  def bar
    @bar
  end
end

foo = Foo.new
puts foo.bar = 42 # 42
puts foo.bar # "these not the droids you are looking for"

我希望最后一行打印"these not the droids you are looking for"而不是42。有可能吗?

1 个答案:

答案 0 :(得分:3)

  

有可能吗?

不,这就是在ruby中对待赋值运算符的方式。您可以从bar=切换到set_bar。现在,这只是一个普通方法,不会在赋值操作中忽略其返回值(因为它不能在其中使用)。

或者您可以执行类似foo.send("bar=", 42)的操作,但是请不要这样做。