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
どんなオプションがあるのか書いたりするのは大変そうです.
オプション名の補完をするのも難しそう.
どうしているんだろう・・・
でも,引数のデフォルト値を持った関数を定義するのに
便利なので使おうと思いました.■