Rubyで抽象クラスを実装する方法 質問する

Rubyで抽象クラスを実装する方法 質問する

Ruby には抽象クラスの概念がないことは知っています。しかし、それを実装する必要がある場合、どうすればいいでしょうか? 私は次のようなことを試しました:

class A
  def self.new
    raise 'Doh! You are trying to write Java in Ruby!'
  end
end

class B < A
  ...
  ...
end

しかし、B をインスタンス化しようとすると、内部的に が呼び出されA.new、例外が発生します。

また、モジュールはインスタンス化できませんが、継承することもできません。新しいメソッドをプライベートにすることもできません。

誰か何かアドバイスはありますか?

ベストアンサー1

遅ればせながら、抽象クラスをインスタンス化するのを阻止する理由はないと思います。特に、その場でメソッドを追加できるため

Rubyのようなダックタイピング言語は、実行時のメソッドの有無や動作に基づいて、メソッドを呼び出すかどうかを決定します。したがって、あなたの質問は、抽象クラスに当てはまるので、方法、意味がある

def get_db_name
   raise 'this method should be overriden and return the db name'
end

これで話は終わりです。Java で抽象クラスを使用する唯一の理由は、特定のメソッドが「埋められる」一方で、他のメソッドの動作は抽象クラスで行われるようにするためです。ダックタイピング言語では、クラスや型ではなくメソッドに重点が置かれているため、心配はそのレベルに移すべきです。

あなたの質問では、基本的に Java のキーワードを再現しようとしていますabstractが、これは Ruby で Java を実行するためのコードの臭いです。

おすすめ記事