加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – ruby??类和具有相同名称的模块之间的关系是什

发布时间:2020-12-17 02:28:23 所属栏目:百科 来源:网络整理
导读:在我的rails应用程序中,我有一个模型/ foo.rb和models / foo / exceptions.rb: class Foo include Foo::Exceptionsendmodule Foo::Exceptions class MySpecialException Exception endend 在rails控制台上,我看到了这个: Foo::MySpecialExceptionFoo::Exce
在我的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

>您如何看待我的文件结构/命名空间?
>我的包含行是否必要,或者Rails是否自动包含这些模块?
>为什么MySpecialException存在于顶级Foo命名空间中并指向Foo :: Exceptions :: MySpecialException?
>这两个类是= =但不是===是什么意思?

我在irb中探讨了这个问题但是仍然遇到了与我在Rails中看到的行为不一致的错误.

相关:What is a conventional place to keep custom Exception definitions in a rails project?

解决方法

What is the relationship between a ruby class and module with the same name?

类和模块在ruby中不能具有相同的完全限定名称.可以有一个类Foo :: Bar和一个模块Baz :: Bar,在这种情况下,类和模块之间没有关系.但是,它们不可能同时具有类Foo :: Bar和模块Foo :: Bar.

(我不确定这与你的其余问题有什么关系)

Is my inclusion line in Foo necessary,or does Rails autoinclude those modules?

Rails不会自动包含您的模块.然而,这并不意味着有必要包括你自己,你可以只访问它合格.即在Foo类中使用Exceptions :: MySpecialException而不仅仅是MySpecialException.

Why does MySpecialException exist in the top level Foo namespace and point to Foo::Exceptions::MySpecialException?

因为你把Foo :: Exceptions包含在Foo中.因为Foo :: Exceptions的所有实例方法也是Foo的实例方法,并且Foo :: Exceptions的所有常量也是Foo的常量 – 包括MySpecialException.

What does it mean that those two classes are == but not ===?

==表示它是同一个班级.它不是===意味着该类不是它自己的实例(因为x === y与y.is_a相同?(x)如果x是一个类).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读