gpt4 book ai didi

Ruby 条件赋值和私有(private)方法

转载 作者:数据小太阳 更新时间:2023-10-29 06:41:52 26 4
gpt4 key购买 nike

从下面的代码来看,||= 运算符似乎是从类外部计算的。

class Foo
attr_reader :bar

def baz
self.bar ||= 'baz'
end

private

attr_writer :bar
end

puts Foo.new.baz
# => in `baz': private method `bar=' called for #<Foo:0x007fd9720829a8> (NoMethodError)

引用自 Official expansion of ||= conditional assignment operator 上已接受的答案:

In other words, the expansion c = c || 3 is (excluding bugs like in pre-1.9) correct.

重写baz方法为self.bar = self.bar || “baz” 不会引发错误。

我正在寻找关于 Ruby 以这种方式行事的如何为什么的明确答案,因为它似乎违反直觉。

此行为存在于 Ruby 版本 1.9.3、2.0.0 和 2.1.2 中,这让我相信这不是错误。

最佳答案

这看起来像一个 bug .

更新:bugfixed在后备箱里,是slated for back porting to 2.1 and 2.0 .

请注意,问题比这更普遍,所有 缩写赋值都被打破,而不仅仅是条件缩写赋值:

private def foo=(*) end
public def foo; 0 end

self.foo = 42

self.foo += 42
# private method `foo=' called for main:Object (NoMethodError)

private :foo

self.foo += 42
# private method `foo' called for main:Object (NoMethodError)

关于Ruby 条件赋值和私有(private)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24058424/

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