我正在慢慢地阅读rails源代码,以便更好地掌握ruby和rails。在下面的rails类test_case.rb中
这条线是
class TestCase < ::Test::Unit::TestCase我想知道这样做是否有什么不同
class TestCase < Test::Unit::TestCase这可能看起来微不足道,但这些事情对于学习一门新语言很重要。如果我删除前导的::,测试仍然为ActiveSupport运行,那么它做了什么…:P
发布于 2011-05-16 05:24:45
::Test可以确保你得到一个名为Test的顶层模块。
后一种情况(Test::Unit::TestCase)不能确保测试是一个顶层模块,例如,它可以是一个类。这意味着在大多数情况下,它可以工作,但您可能会意外地打破它。
发布于 2011-05-16 05:51:08
假设你有这样的代码
module UserTesting
class Test # Details about a simple test
end
class TestCases < Test::Unit::TestCase
end
end
# => NameError: uninitialized constant UserTesting::Test::Unit这将会出错,因为您正在创建的类可用的Test常量中没有Unit常量。如果您通过::来处理它,这就像路径中的前导斜杠。
还有一种特殊的用法--你可以在缺省根命名空间之外的其他地方计算你的代码,在那里你实际上需要用双冒号来寻址像::Object这样的类(通常用来对它们进行monkeypatch )。
https://stackoverflow.com/questions/6011333
复制相似问题