为什么在Rails中应该明确要求一些Ruby常量(类,模块)?

时间:2016-09-20 13:04:41

标签: ruby-on-rails ruby

ruby​​中似乎有两种类型,一种我不需要它们总是可访问的类型(如Float,Array,Hash等)。他们是红宝石的一部分,这是预期的。

但是除非明确要求,否则还有一些常量无法访问(例如REXMLObservableYAML)。它们也是Ruby的一部分,我希望能够在不需要的情况下访问它们。

为什么没有要求这些常量不可用?

在Rails指南中,不建议明确要求任何内容,因为这会混淆Rails自动加载机制。如果还需要这些常量,那么最好的方法是什么?

我应该使用需要还是 require_dependency

我应该在使用常量的文件顶部使用require还是应该以某种方式全局地执行?

编辑:此外,由于常量可用性取决于加载顺序,因此很容易忘记需要一些文件,并且在加载顺序以某种方式更改之前它不会中断。除了对你使用的每个常数都有额外的警觉之外,没有面对这种错误的最佳方法是什么?

1 个答案:

答案 0 :(得分:2)

有两种东西是"内置"。

  1. Ruby核心。这些你不必要的东西。他们是语言本身的一部分。数组,哈希等
  2. 标准库(stdlib)。像Struct,OpenStruct,Time的其他功能等等。它们对语言不是必不可少的。只是您可以使用的功能。如果您不在程序中使用REXML,则不需要加载(这会浪费CPU时间和内存)。因此,在使用它们之前,您必须要求这些东西。
  3.   

    如果还需要这些常量,那么最好的方法是什么?

    如果你没有对它们进行monkeypatch,那么你只需要继续,并根据需要随时提出要求。我通常在文件的顶部使用它们。

    如果你做monkeypatch他们,我建议你重新考虑。 :)