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

时间:2016-07-15 13:00:13

标签: ruby-on-rails ruby

我读到here ruby​​类只能从一个类继承,并且可以include个模块。

但是,设计模块定义了这样的控制器:

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

现在,鉴于Users可能是一个类,PasswordsController是一个方法:

>> Devise::PasswordsController.class
=> Class

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

4 个答案:

答案 0 :(得分:2)

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

在上面的代码中,Users是模块,PasswordsController是Users模块中的类。类似地,Devise是模块,PasswordsController是Devise模块中的类。

所以当你运行

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

答案 1 :(得分:1)

你在这里感到困惑的是你有错误的假设,即:

  

Users可能是一个类

不一定。这里我们有嵌套命名空间,因此Users可以是类或模块。实际上,类模块。

  

PasswordsController是一种方法

PasswordsController这是一个嵌套在Users命名空间中的类。 ::只是让你进入嵌套树的一个级别。

考虑:

module Foo
  class Bar
  end
end

Foo::Bar.class # => class

答案 2 :(得分:0)

从Rails命名约定来看,Users很可能是一个模块,而Users::PasswordsController是一个类。

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

module Foo
  BAR = 'bar'
end

Foo::BAR
#=> "bar"

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

module Foo
  class Bar
  end
end

Foo::Bar
#=> Foo::Bar

答案 3 :(得分:0)

用户和设备都是模块,仅用于确定PasswordsController和PasswordsController的实际类。