ruby中似乎有两种类型的类型,我不需要它们总是可以访问的(比如Float,Array,Hash等)。他们是红宝石的一部分,这是预期的。为什么在Rails中应该明确需要一些Ruby常量(类,模块)?
但也有一些常数,除非明确要求(如REXML,Observable,YAML)不可访问。它们也是Ruby的一部分,我希望能够在没有要求的情况下访问它们。
为什么这些常数不可用没有要求?
在Rails指南中,不建议明确地要求任何东西,因为这会弄乱Rails自动加载机制。如果无论如何都需要这些常量,那么最好的办法是什么?
我应该使用要求或require_dependency?
我应该在使用常量的文件顶部使用require还是应该在全局中以某种方式执行?
编辑:另外,由于常量的可用性取决于加载顺序,因此很容易忘记需要某个文件,直到加载顺序发生某种变化时才会中断。除了对使用的每一个常量都额外警惕之外,不要面对这种错误的最佳方式是什么?
好的,这很好,我可以要求他们在顶部。但考虑下一种情况:我在多个文件中使用常量。所以我应该在顶部的每个文件中要求它。但是ruby并没有强制我这么做,如果一个文件已经加载了所有在可以使用该常量之后加载的文件。 问题是我可以很容易地忘记需要文件,如果它的工作没有要求,如果加载顺序改变它会打破。 –
@LevDenisov:这引入了加载顺序依赖关系。不要这样做。要么在引导文件中或在使用它的每个单独文件中都需要该东西。 –
@LevDenisov:有一次,我花了两天时间精确地调试了这个:神秘的错误,起源于某种情况下加载的东西,而不是加载到另一个中。 –