gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 16:45:14 24 4
gpt4 key购买 nike

假设我有一个 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/受启发的语言都习惯于返回 bool “成功”值 - 是否可以使用 Ruby 中的“等于语法”为 setter 执行此操作?

此外 - 如果这不可能,为什么不呢?允许“equals setter”操作返回一个值是否有任何可想而知的缺点?

最佳答案

一个缺点是您会破坏链式赋值语义:

$ 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 将采用 true 如果这按您预期的方式工作(右关联性)。对于使用您的界面并习惯了典型语义的人来说,这可能会让他们感到惊讶。

你还让我想到了并行赋值,例如:

x, y = 1, 2

显然该表达式的返回值是 implementation specific ...我想我不会链接并行分配:)

好问题!

关于ruby - 是否可以让 class.property = x 返回 x 以外的东西?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34477921/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com