检查文件添加了哪些类并不是一件容易或常见的事情。更好的方法是将所有的 tile 类放在一个命名空间下。由于可以重新打开类,因此可以将它们拆分为多个文件。
class Tiles
class Pipe
# ...
end
end
class Tiles
class Box
# ...
end
end
然后Tiles.constants
could 将返回一个符号数组:[:Pipe, :Box]
,并且可以用于使用Tiles.constants.map { |const| Tiles.const_get const }
or获取类引用列表Tiles.constants.map &Tiles.method(:const_get)
如果出于某种原因,知道特定文件添加了哪些常量非常重要,则以下代码显示了一种方法:
constants1 = Object.constants
require "./tiles.rb"
constants2 = Object.constants
added_constants = constants2 - constants1
如果tiles.rb
有 和 的类定义Pipe
,Box
那么added_constants
就是[:Pipe, :Box]
。
这种方法的问题是可能会显示 gem 添加的常量,例如:
constants1 = Object.constants
require 'mechanize'
class Foo
end
constants2 = Object.constants
added_constants = constants2 - constants1
既然我打过电话require 'mechanize'
,这份added_constants
名单就会很长,而且不仅仅包括Foo
。