gpt4 book ai didi

ruby - 如何访问类 << self 中定义的实例变量

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

给定以下代码,Dog.speak怎么来的?不返回 "here is the @var variable" :

class Dog
class << self
@var = "here is the @var variable"

def speak
@var
end
end
end

p Dog.speak

相反,它返回 nil

我的理解:class << self打开 Dog 的单例类对象.在那个单例对象上,我们正在设置 @var 的实例变量。 .因此,我认为 @var 的实例变量可从 Dog.speak 访问.

我在这里缺少什么概念?为什么是@var speak 无法访问方法?

令人困惑的是,这却按预期工作:

class Dog
class << self
def set_it
@var = "The instance variable of @var is now accessible"
end

def speak
@var
end
end
end

Dog.set_it
p Dog.speak # => "The instance variable of @var is now accessible"

最佳答案

您在单例类级别声明变量并尝试在类级别访问它。调试输出是你的 friend :

class Dog
class << self
puts "I am #{self}"
@var = "here is the @var variable"

def speak
puts "I am #{self}"
@var
end
end
end

打印出来:

#⇒ I am #<Class:Dog>
▶ Dog.speak
#⇒ I am Dog

请注意,前者在解析代码时打印,而后者仅在明确执行对 Dog.speak 的调用时打印。

关于ruby - 如何访问类 << self 中定义的实例变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49035306/

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