gpt4 book ai didi

ruby 访问静态变量

转载 作者:数据小太阳 更新时间:2023-10-29 08:14:22 25 4
gpt4 key购买 nike

class A
@@ololo = 1
end

A::ololo
A.new.ololo
NoMethodError: undefined method `ololo'

好吧。我需要一个 attr_reader

class B
@@ololo = 1
attr_reader :ololo
end

A::ololo
NoMethodError: undefined method `ololo'
A.new.ololo
=> nil

什么鬼? ruby 访问器有任何限制吗?

class C
@@ololo = 1
def self.ololo
@@ololo
end
def ololo
@@ololo
end
end

C::ololo
=> 1
C.new.ololo
=> 1

Ruby 男士通常会说“是啊!相当不错!”。这很好吗?谁能提供更短的代码?

最佳答案

你不能做你想做的:)

@harald 是对的。 attr_reader 只会为实例变量定义 GETTER,对于“静态”(又名“类变量”),您需要自己定义 setter 和 getter:

class A
@@ololo = 1

# instance level

# getter
def ololo
@@ololo
end
# setter
def ololo=trololo
@@ololo = trololo
end

# and class level
# if you need it

# getter
def self.ololo
@@ololo
end
# setter
def self.ololo=trololo
@@ololo = trololo
end
end

所以:

a = A.new
b = A.new
A.ololo
#=> 1
a.ololo
#=> 1
A.ololo = 100
A.ololo
#=> 100
a.ololo
#=> 100
b.ololo
#=> 100
a.ololo = 4
A.ololo
#=> 4

...

较短的一个:

class A
@ololo = 1
class << self
attr_accessor :ololo
end
end

关于ruby 访问静态变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7063371/

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