railsにあったカッコイイ関数について

この前,railsで遊んでたときに

validates :name, :presence => true, :length => {:maximum => 30}

とか書く場面があった.これを書いて
「カッコイイ!!だけどどう実装しているのか分からない(>_<)」
と思った.

だけど,
http://www.oiax.jp/rails/study/active_record_validations_add.html

このサイトをみて何となく分かった.

数の総和を出す関数(数は3つ以下,未定義の数は0にする)を

def tasizan3( kazu = {})
kazu = {
:v1 => 0,
:v2 => 0,
:v3 => 0
}.merge kazu

kazu[:v1]+kazu[:v2]+kazu[:v3]
end

みたいに定義してつかえるみたい.
出力は

tasizan3 #=> 0
tasizan3 :v1=>1 #=> 1
tasizan3 :v1=>1 :v2=>2 #=> 3
tasizan3 :v1=>1 :v2=>2 :v3=>4 #=> 7
tasizan3 :v1=>1 :v2=>2 :v3=>4 :v4=>8 #=> 7

みたいになります.


ちなみに
validates :name, :presence => true, :length => {:maximum => 30}
の第一引数の :name はアクセッサの名前を指定しているみたいです.
だから
validates :name, :presence => true, :length => {:maximum => 30}

:name と同じ名前のアクセサに
:presence (表示)を有効にする ことと

length (長さ)の
maximum (上限)を30にする こと

を有効にします.

という意味みたいです.

そう言えば,twitterAPIのときも同じようなことがありました.

http://github.com/jnunemaker/twitter/blob/master/lib/twitter/trends.rb

どうやら,最後の引数をoptionという名前のハッシュして使うのは常套手段らしいです.

でも,この実装だと,Rdocを作ったときに
http://rdoc.info/github/jnunemaker/twitter/master/Twitter/Trends
どんなオプションがあるのか書いたりするのは大変そうです.
オプション名の補完をするのも難しそう.
どうしているんだろう・・・


でも,引数のデフォルト値を持った関数を定義するのに
便利なので使おうと思いました.■