ruby-on-rails – ruby??类和具有相同名称的模块之间的关系是什
在我的rails应用程序中,我有一个模型/ foo.rb和models / foo / exceptions.rb:
class Foo include Foo::Exceptions end module Foo::Exceptions class MySpecialException < Exception end end 在rails控制台上,我看到了这个: >> Foo::MySpecialException Foo::Exceptions::MySpecialException < Exception >> Foo::MySpecialException == Foo::Exceptions::MySpecialException true >> Foo::MySpecialException === Foo::Exceptions::MySpecialException false >您如何看待我的文件结构/命名空间? 我在irb中探讨了这个问题但是仍然遇到了与我在Rails中看到的行为不一致的错误. 相关:What is a conventional place to keep custom Exception definitions in a rails project? 解决方法
类和模块在ruby中不能具有相同的完全限定名称.可以有一个类Foo :: Bar和一个模块Baz :: Bar,在这种情况下,类和模块之间没有关系.但是,它们不可能同时具有类Foo :: Bar和模块Foo :: Bar. (我不确定这与你的其余问题有什么关系)
Rails不会自动包含您的模块.然而,这并不意味着有必要包括你自己,你可以只访问它合格.即在Foo类中使用Exceptions :: MySpecialException而不仅仅是MySpecialException.
因为你把Foo :: Exceptions包含在Foo中.因为Foo :: Exceptions的所有实例方法也是Foo的实例方法,并且Foo :: Exceptions的所有常量也是Foo的常量 – 包括MySpecialException.
==表示它是同一个班级.它不是===意味着该类不是它自己的实例(因为x === y与y.is_a相同?(x)如果x是一个类). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |