打开对象以包含模块

时间:2016-07-27 20:25:43

标签: ruby

我正在用ruby编写一个交互式shell(就像irb一样),用另一种语言编写。我想在模块中编写关于shell的所有函数(即读取输入和解析),然后执行class Object; include Shell; end

我的疑问是:从我在显微镜下观察 Ruby ,我在CRuby(我正在使用的)中学到了什么,当你包含一个模块时,ruby会创建一个这样的副本模块并将其作为包含它的类的超类附加,因此看起来这会浪费一点内存,但后来我查看了内核模块,AFAIK包含在对象中,这似乎没问题。

最后,问题是,将Shell纳入Object是不是一个好习惯?

1 个答案:

答案 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似乎是一个好方法。