让我们以Rails gem为例
在require 'rails'
之前
irb(main):001:0> Rails
NameError: uninitialized constant Rails
irb(main):002:0> ActionPack
NameError: uninitialized constant ActionPack
require 'rails'
之后
irb(main):005:0> require 'rails'
true
irb(main):007:0> Rails.constants
[:Railtie, :Rack, :Initializable, :Configuration, :WelcomeController, :InfoController, :VERSION, :Paths, :Info, :MailersController, :Application, :Engine]
irb(main):009:0> ActionPack.methods-Object.methods
[:gem_version, :version, :initialize_copy]
现在,ActionPack模块在控制台中可用,还有哪些其他模块或类(如果有)以及如何了解这些模块?
答案 0 :(得分:3)
这取决于宝石开发者。要了解您的名称和对象空间如何变化,应该有许多聪明的方法。
我很快回答如何找出新的模块(-Constants):
initial_modules = Module.constants
# -> [:Object, :Module, :Class, :BasicObject, :Kernel, :NilClass, ...]
require 'rails'
Module.constants - initial_modules # all NEW constants
# -> [:Pathname, :OpenSSL, :Digest, :SecureRandom, :Concurrent, :I18n, :CGI, :ActiveSupport, :Set, :SortedSet, :Timeout, :TimeoutError, :Logger, :LoggerSilence, :DateAndTime, :Psych, :StringScanner, :ScanError, :Date, :DateTime, :YAML, :Base64, :TSort, :Rails, :BigDecimal, :BigMath, :TZInfo, :ThreadSafe, :Threadsafe, :SynchronizedDelegator, :JSON, :OpenStruct, :Singleton, :Mutex_m, :ActionPack, :Rack, :ActionDispatch, :Mime]
正如您所看到的,Rails还需要(但未提供)许多新内容,如Date,OpenSSL等.pp。 实际上,需求也可以在运行时发生,这样当使用代码时,这个列表会增长。 希望有所帮助。