やったこと
Ruby では下記のようなインターフェースがありません。
そこで、Ruby でも似たようなことを実現する方法を試してみます。
確認環境
$ ruby --version
ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-darwin17]
調査
継承で実現する
main.rb
class MyInterface
def hoge
raise NotImplementedError.new("#{self.class}##{__method__} を実装してください")
end
end
class SampleFailed < MyInterface
end
class SampleSuccess < MyInterface
def hoge
p "#{self.class}##{__method__}が実装されている!"
end
end
SampleSuccess.new.hoge
SampleFailed.new.hoge
出力結果
$ ruby main.rb
"SampleSuccess#hogeが実装されている!"
Traceback (most recent call last):
1: from main.rb:17:in `<main>'
main.rb:3:in `hoge': SampleFailed#hoge を実装してください (NotImplementedError)
Module で実現する
main2.rb
module MyInterface
def hoge
raise NotImplementedError.new("#{self.class}##{__method__} を実装してください")
end
end
class SampleFailed
include MyInterface
end
class SampleSuccess
include MyInterface
def hoge
p "#{self.class}##{__method__}が実装されている!"
end
end
SampleSuccess.new.hoge
SampleFailed.new.hoge
出力結果
$ ruby main2.rb
"SampleSuccess#hogeが実装されている!"
Traceback (most recent call last):
1: from main2.rb:20:in `<main>'
main2.rb:3:in `hoge': SampleFailed#hoge を実装してください (NotImplementedError)