[英]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.