gpt4 book ai didi

类 << self block 内的 ruby​​ 常量作用域

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

给定一个 ruby 类

class Thing
class << self
NUM = 3

def speak
NUM.times { puts "Hi!" }
end
end
end

我无法访问 Thing::NUM来自课外。如果改为

class Thing
NUM = 3
class << self
def speak
NUM.times { puts "Hi!" }
end
end
end

Thing.speak仍然按预期工作,但我现在也可以访问 Thing::NUM .我知道 class << self成语打开了对象的单例类,但我很困惑为什么这样定义的类方法是可公开访问的,而常量不是。

最佳答案

您必须引用正确的类:

Thing.singleton_class::NUM #=> 3

单例类中常量和方法的引用方式没有不一致:

Thing.methods.include?(:speak)                          #=> true 
Thing.singleton_class.methods.include?(:speak) #=> false
Thing.singleton_class.instance_methods.include?(:speak) #=> true

关于类 << self block 内的 ruby​​ 常量作用域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28613765/

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