gpt4 book ai didi

ruby - 单例类中的实例变量

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

我有以下代码:

class Fish
# @message = "I can swim"

class << self
@message = "I can jump!"
define_method(:action) { @message }
end
end


Fish.action => nil

只要我取消注释上面的 @message 变量,Fish.action 就会返回 I can swim。为什么在这两种情况下它都忽略了 I can jump 消息。这是为什么?为什么 Fish 类绑定(bind)到开始时定义的 @message 而不是在 singleton 类中?

最佳答案

是因为class << self打开类的单例类上下文:

class Foo
p self # Foo
class << self
p self # #<Class:Foo>
define_method(:bar) { p self } # Foo
end
end
Foo.bar

您可以通过以下方式验证:

Fish.singleton_class.instance_variable_get(:@action) # => "I can jump!"

关于ruby - 单例类中的实例变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40211601/

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