0

在 Ruby 中,类层次结构似乎非常随意。例如,我们可以在没有类的情况下直接在模块中定义方法,甚至可以在类中定义一个类。谁能解释这两种情况是如何工作的?

4

1 回答 1

1

我们可以在没有类的情况下直接在模块中定义方法

首先,您需要了解 Ruby 中类和模块之间的区别。

让我们试试这个:

module MyModule
end

MyModule.new

你得到 :NoMethodError: undefined method `new' for MyModule:Module

这是最基本的区别之一,模块不是可实例化的。模块用作将代码划分为逻辑部分或避免代码重复的工具,例如:

module MyModule
  def hello
    puts "Hello world"
  end
end

class Klass1
  include MyModule
end

class Klass2
  include MyModule
end

在这里,Klass1&Klass2将继承该hello方法。

现在,关于嵌套类。

如您所见,您可以在类中定义类,这只是一种命名类的方法,用于组织目的:

class MyKlass
  class MyNestedKlass
  end

  def something
    MyNestedKlass.new 
  end
end

MyKlass::MyNestedKlass.new
于 2013-03-24T10:57:38.043 回答