我如何知道需要明确要求哪些 Ruby 标准库?

3
我一直在查看1.9.3的 Ruby标准库文档。我想知道如何找出需要显式引用的库。
例如,有人告诉我需要显式引用json库,但不需要rubygems,尽管它们都出现在标准库列表中。
是否有其他地方可以查找有关要求的信息,甚至可以运行pry/irb命令来查看已经“required”的内容?
2个回答

7
每个库都需要被要求/加载,如果您想使用它。
就性能而言,require很聪明,如果已经加载了库,它将不会再次加载。
然而,如果您想检查一个库是否被要求,您应该查看它定义的顶级命名空间,并检查它是否在您当前的范围内定义。例如,打开一个IRB会话并执行:
defined? JSON  # => nil (it's not loaded)
require 'json' # => true (load it)
defined? JSON  # => "constant" (it's loaded)
require 'json' # => false (it's already loaded, so it's not loaded it again)

Ruby,像大多数语言一样,有一个类/模块列表,它会自动加载,无论您是否要求,只是因为即使是微不足道的程序,99%的时间都需要它们。这些不需要显式加载。判断的简单方法是在开发期间运行应用程序,Ruby会告诉您是否需要require某些内容。如果程序找不到所需内容,地球也不会停止转动,只需添加该行并重新运行,直到程序正确运行。这是开发/调试周期的一部分。不要认为您必须要求所有内容。 - the Tin Man

2

通常情况下,强制要求加载某些内容并不会有害。如果已经加载了,一般来说,require语句没有任何影响。

一些核心库组件会自动加载或通过引用其顶级符号进行自动加载。这个列表因Ruby的版本而异。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接