1年ぐらい前に社内ブログにメモしてた内容をまんま転載。 はて、これはduck typingなのか? 概要 Object#acts_like?を使うとクラスの異なるオブジェクトが同じ振る舞いをするかどうかの判定が手軽にできるようになる。 具体例 ActiveSupportではTimeとDateTime、ActiveSupport::TimeWithZoneに共通のメソッドを実装し、それらが入れ替わってもうまく動くようになっている。 これを実装するにあたってにTimeっぽく振る舞うかどうかを判定するためにacts_like?を使っている。 require "active_support/all" # Timeっぽく動くやつら Time.now.acts_like?(:time) #=> true DateTime.now.acts_like?(:time) #=> true Time.zone