Ruby访问器有没有办法返回除set变量之外的东西?

Chr*_*yer 4 ruby class accessor

我想在编写器访问器中进行一些检查.我的第一个想法是返回一个布尔值.

class MyClass
  def var=(var)
    @var = var
    # some checking
    return true
  end
end

m = MyClass.new
retval = (m.var = 'foo')

=> "foo"
Run Code Online (Sandbox Code Playgroud)

我可以在编写器访问器中设置返回值吗?如果是,我怎样才能得到这个值?

epo*_*olf 9

我会使用set_var(var)而不是你想要做的事情,假设属性编写器正常工作.你要做的是非标准的,并且对于下一个使用你的代码的穷人来说是不明显的.(它可能就是你自己)如果发送了错误的输入或者发生了异常的事情,我会抛出异常.

你想要这种行为

Correct
>>temp = object.var = 7
=> 7 

Wrong
>>temp = object.var = 7
=> false
Run Code Online (Sandbox Code Playgroud)

=运算符应始终返回传递给它的值.Ruby使用隐式返回,这在编程语言中并不常见.使用时仔细检查退货method=().