我正在用ruby编写一个交互式shell(就像irb一样),用另一种语言编写。我想在模块中编写关于shell的所有函数(即读取输入和解析),然后执行class Object; include Shell; end
。
我的疑问是:从我在显微镜下观察 Ruby ,我在CRuby(我正在使用的)中学到了什么,当你包含一个模块时,ruby会创建一个这样的副本模块并将其作为包含它的类的超类附加,因此看起来这会浪费一点内存,但后来我查看了内核模块,AFAIK包含在对象中,这似乎没问题。
最后,问题是,将Shell
纳入Object
是不是一个好习惯?
答案 0 :(得分:0)
正在运行class Object; include Shell; end
与include Shell
相同,因为Object
是默认范围。
这对记忆来说并不坏,这是一个非常基本的行为。
如果您想避免使用Object
(全局)范围,可以定义包含Shell
的自定义模块:
class App
include Shell
def self.begin
# do something with shell
end
end
App.begin
虽然如果你正在制作一个REPL并希望你的方法在全局范围内可用,那么在没有包装类的情况下说include Shell
似乎是一个好方法。