当您需要 gem 时,您可以访问哪些所有内容?

What all things can you access when you require a gem?

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

这取决于 gem 开发人员。要查看您的名称空间和对象空间如何更改,应该有许多巧妙的方法。

我很快就会回答如何找出有哪些新模块(-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、etc.pp。 实际上,需求也可能在运行时发生,因此此列表会随着您使用代码而增长。 希望能有所帮助。