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