1. まずは簡単にやってみる
module TestInterface
def method1
raise NotImplementError
end
end
class SomeClass
include TestInterface
def method1
puts "hoge"
end
end
SomeClass.new.method1
実装はココから拝借。
愚直にmoduleで書いたほうが良いんじゃないかなぁと思っている。 そのほうが明示的でわかりやすいというか… 業務でどうしても欲しい場合は、消去法でコレで良いんじゃないんですか。という感じ。
2. Gem使う
その名もズバリなInterFaceというGemがあるので、コレを使ってみることにする。
実装もここから読めるし、100行もないくらいの短いコードなので、興味がある人は読んでみて欲しい。 interface/interface.rb at master · djberg96/interface · GitHub
require 'rubygems'
require 'interface'
TestInterface = interface{
required_methods :method1
}
class SomeClass
def method1
puts "hoge"
end
implements TestInterface
end
SomeClass.new.method1
Interfaceをそれっぽく、かつRubyっぽい感じ*1でかける。 ただ一番しっくりこないのは、implements*2を必ずメソッドの定義よりも下に書かないと動かないことだろう。 多分これは実装上の都合なだけな気がするので、もしかすると修正されて、メソッド定義よりも上に書いてみても大丈夫になるかもしれない。 業務で使うのはあまりオススメ出来ない…
まとめ
結局少し試してみたけど、これならやらんでもいいかな…となってしまった。
*2:コード見れば解るけど、このGemのimplementsの実体はただのincludeのエイリアスだったりする。 https://github.com/djberg96/interface/blob/master/lib/interface.rb#L106