当您需要宝石时,您可以访问哪些内容?

时间:2017-11-15 05:20:41

标签: ruby-on-rails ruby irb

让我们以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模块在控制台中可用,还有哪些其他模块或类(如果有)以及如何了解这些模块?

1 个答案:

答案 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。 实际上,需求也可以在运行时发生,这样当使用代码时,这个列表会增长。 希望有所帮助。