ruby – 是否可以让class.property = x返回x以外的东西?

前端之家收集整理的这篇文章主要介绍了ruby – 是否可以让class.property = x返回x以外的东西?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
假设我有一个 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 …我想我不会链接并行赋值:)

好问题!

猜你在找的Ruby相关文章