假设我有一个
Ruby类:
class MyClass def self.property return "someVal" end def self.property=(newVal) # do something to set "property" success = true return success # success is a boolean end end
如果我尝试并做MyClass.property = x,则整个语句的返回值始终为x.在许多基于C的/灵感的语言中,这是一个惯例来返回一个布尔的“成功”值 – 是否可以使用Ruby中的“equals语法”为设置器执行此操作?
此外 – 如果这不可能,为什么不呢?允许“等于设置者”操作返回值是否有任何可想象的缺点?
解决方法
一个缺点是你会打破链接赋值语义:
$irb irb(main):001:0> x = y = 3 => 3 irb(main):002:0> p x 3 => nil irb(main):003:0> p y 3 => nil irb(main):004:0>
考虑:
x = MyClass.property = 3
那么,如果你按照你的预期(右组合)工作,那么x将会成立.对于使用您的界面并用于典型语义的人来说,这可能是一个惊喜.
你也让我思考并行分配,例如:
x,y = 1,2
显然,该表达式的返回值为implementation specific …我想我不会链接并行赋值:)
好问题!