簡體   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