繁体   English   中英

ruby类方法可以从另一个类继承吗?

[英]Can a ruby class method inherit from another class?

在这里读到,ruby类只能从一个类继承,并且可以include模块。

但是,devise模块定义了如下控制器:

class Users::PasswordsController < Devise::PasswordsController
  ...
end

现在,假设Users可能是一个类,而PasswordsController是一个方法:

>> Devise::PasswordsController.class
=> Class

一个类中的方法如何从另一个类继承?

class Users::PasswordsController < Devise::PasswordsController
...
end

在上面的代码中,Users是模块,而PasswordsController是Users模块中的类。 同样,Devise是模块,而PasswordsController是Devise模块中的类。

所以当你跑步

Users::PasswordsController.class
#=> Class
Users.class
#=>Module

令您感到困惑的是您有错误的假设,即:


Users可能是一类

不必要。 这里我们有嵌套的名称空间,因此Users可以是类或模块。 实际上,类模块。


PasswordsController是一种方法

这里的PasswordsController是嵌套在Users命名空间中的类。 ::仅使您可以进入嵌套树的一级。


考虑:

module Foo
  class Bar
  end
end

Foo::Bar.class # => class

根据Rails的命名约定, Users很可能是一个模块,而Users::PasswordsController是一个类。

请注意, ::不是用于调用类方法的(尽管可以通过这种方式使用它)。 它用于访问模块/类中的常量。 例如

module Foo
  BAR = 'bar'
end

Foo::BAR
#=> "bar"

在Ruby中,模块/类名是一个常量,存储在其中的值是模块/类。 因此, ::也用于访问另一个模块/类中的模块/类。 例如

module Foo
  class Bar
  end
end

Foo::Bar
#=> Foo::Bar

“用户”和“设备”都是模块,仅用于确定真实的类,即PasswordsController和PasswordsController。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM