我正在慢慢穿过导轨源,以便更好地抓住红宝石和导轨。在以下rails类test_case.rb
中该行是
class TestCase < ::Test::Unit::TestCase
我想知道做以下事情是否有任何区别
class TestCase < Test::Unit::TestCase
这可能看似微不足道,但这些事情对于选择一种新语言至关重要。如果我删除了前导符,那么测试仍会针对ActiveSupport运行,那么它是做什么的......:P
答案 0 :(得分:8)
::Test
确保您获得名为Test的顶级模块。
后一种情况(Test::Unit::TestCase
)不能确保Test是一个顶层模块,例如它可以是一个类。这意味着大部分时间它都会起作用,但你可能会意外地破坏它。
答案 1 :(得分:5)
想象一下,你有这个代码
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)。