加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 19:45:19 所属栏目:百科 来源:网络整理
导读:假设我有一个 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 endend 如果我尝试并做MyClass.property = 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 …我想我不会链接并行赋值:)

好问题!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读