【问题标题】:Why do some modules have inner classes?为什么有些模块有内部类?
【发布时间】:2020-03-11 22:43:21
【问题描述】:

我知道如何在 Ruby 的类中使用模块:

module Calculator 

    def add(a,b)
        a+b
    end

end
class Watch

    include Calculator

    def time 
        Time.now
    end

end
w = Watch.new()

puts w.time # 2020-03-11 22:34:01 +0000
puts w.add(3,5) # 8

但是,有时我可以看到一些模块里面有一个类。例如,在 Rails 中,助手:

module MyModule

    class MyClass

        def foo
            puts 'foo'
        end

    end

end

这有什么意义?

为什么我要在模块中创建一个类?

【问题讨论】:

  • 此外,您可以根据需要在另一个类中定义一个类。这在 Ruby 中并不常见,但有时在有人希望类仅作为父类实例的属性实例化时使用。
  • 当你看到一个有类的模块时,原因可能是命名空间。

标签: ruby oop


【解决方案1】:

可以以这种方式使用模块来确定范围。在您的示例中,您可以通过MyModule::MyClass 从模块外部引用MyClass

这有多种用途,例如将相关类组合在一个公共命名空间下。

最好从一些 Ruby 教程(例如示例和资料)中获得有关此方面的更多信息。查看“Ruby - Modules and Mixins”了解更多信息。

【讨论】:

  • 如果这是范围界定的目的,为什么使用模块而不是类?我的意思是 MyModule::MyAnotherModule 可以完成。为什么要上课?
  • Ruby 中的module 通常用作通用命名空间。您可以使用一个类,但除非MyNamespace.new 有任何意义(创建一个实例),否则请使用module 而不是class。实际上,class 是具有特殊能力的module
猜你喜欢
  • 2012-10-02
  • 1970-01-01
  • 2022-01-18
  • 1970-01-01
  • 2010-10-13
  • 1970-01-01
  • 2011-11-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多