0

Ruby では、クラス階層は非常に恣意的に見えます。たとえば、クラスなしでモジュール内にメソッドを直接定義することも、クラス内でクラスを定義することもできます。これら2つのシナリオがどのように機能するかを誰か説明できますか?

4

1 に答える 1

1

クラスなしでモジュール内でメソッドを直接定義できます

まず、Ruby におけるクラスとモジュールの違いを理解する必要があります。

これを試してみましょう:

module MyModule
end

MyModule.new

あなたが得る:NoMethodError: undefined method `new' for MyModule:Module

これは最も基本的な違いの 1 つで、モジュールはインスタンス化できません。モジュールは、コードを論理部分に分割するため、またはコードの重複を避けるためのツールとして使用されます。

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 に答える