gpt4 book ai didi

ruby - 我可以从模块内部添加到类定义吗?

转载 作者:太空宇宙 更新时间:2023-11-03 18:31:01 25 4
gpt4 key购买 nike

我有一个方法想添加到 Rails 应用程序的类中。我试图将它分成一个模块,如下所示:

module Hah
class String
def hurp
"hurp durp"
end
end
end
#make sure the file containing the module is loaded correctly.
puts "Yup, we loaded"

#separate file
include Hah
"foobar".hurp
#should be "hurp durp"

我知道包含模块的文件正在正确加载,因为当我包含该文件时 puts 打印正确,但我收到错误:

undefined method `hurp' for "foobar":String

那我该怎么做呢?

最佳答案

module Hah
class String
#...
end
end

大致相当于:

class Hah::String
#...
end

它创建一个类 Hah::String 并且不引用全局命名空间中的类 String。请注意,后者仅在 module Hah 已声明(使用 module 关键字、Module.new 等)时有效,而前者声明或重新打开 module Hah,然后在该范围内声明或重新打开 class String,在上下文中,它隐式为 class Hah::String.

要在全局命名空间中打开类 String,请使用:

module Hah
class ::String
#...
end
end

因为 ::String 在顶级/全局命名空间中严格引用类 String

关于ruby - 我可以从模块内部添加到类定义吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4079672/

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