引数に専用クラスを作る話をしましたがやっぱ(ry

以前、専用クラスを作ることで
引数の順番を気にしなくて良いまま、タイプ量は少なく
見た目もわかりやすくしてみる話をしたのでした。


http://d.hatena.ne.jp/takkaw/20080614/p1


以下の話は上のURLを読んでから見てください。


その後、色々考えていたらわざわざ専用クラスを作るような
小難しいことは考えずにハッシュを作るようにして
それを渡せば良いじゃん。って事に気づきました。
いやぁ、ごめんごめん。

# 仕込み
class Numeric
  def hz      ; { :freq => self }       ; end
  def khz     ; { :freq => self * 1000 }; end
  def bit     ; { :bit  => self }       ; end
  def channel ; { :channel => self }    ; end
  def ch      ; { :channel => self }    ; end
end

# 実際のWavクラス
class wav
  def initialize( *args )
    args.each { |arg|
      case arg.shift.first
      when :channel ; @channels    = arg.last.to_i
      when :freq    ; @sample_rate = arg.last.to_i
      when :bit     ; @sample_bit  = arg.last.to_i
      end
    }
  end
end
Wav.new 1.channel, 44100.hz, 16.bit
Wav.new 44100.hz,16.bit, 1.channel 


追記:
id:isaisstillalive さんに
Hashじゃなくてインスタンス変数名を入れたArrayの方が良いんじゃないかっていう
トラックバック頂きました。ありがとうございます。
なるほどー、たしかに良いですね。
特に実装側がinstance_variable_set だけで良いし。


http://d.hatena.ne.jp/isaisstillalive/20080725/1216984360


一方、ハッシュにしておくと、従来の通りのハッシュによる指定もできるしなー
どちらか、お好みでっていうことになるのかな。