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 …我想我不会链接并行赋值:)

好问题!

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...