首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ruby ::Module或just Module

ruby ::Module或just Module
EN

Stack Overflow用户
提问于 2011-05-16 05:20:25
回答 2查看 293关注 0票数 8

我正在慢慢地阅读rails源代码,以便更好地掌握ruby和rails。在下面的rails类test_case.rb

这条线是

代码语言:javascript
复制
 class TestCase < ::Test::Unit::TestCase

我想知道这样做是否有什么不同

代码语言:javascript
复制
 class TestCase < Test::Unit::TestCase

这可能看起来微不足道,但这些事情对于学习一门新语言很重要。如果我删除前导的::,测试仍然为ActiveSupport运行,那么它做了什么…:P

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-05-16 05:24:45

::Test可以确保你得到一个名为Test的顶层模块。

后一种情况(Test::Unit::TestCase)不能确保测试是一个顶层模块,例如,它可以是一个类。这意味着在大多数情况下,它可以工作,但您可能会意外地打破它。

票数 8
EN

Stack Overflow用户

发布于 2011-05-16 05:51:08

假设你有这样的代码

代码语言:javascript
复制
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 )。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6011333

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档