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 を実行するためのコードの臭いです。