Ruby のハッシュにオブジェクトっぽくアクセス
本日は、 Ruby のちょっとしたネタをご紹介です。
Ruby で Hash の要素にアクセスするには、もちろん添え字演算子 [ 〜 ] を使います。でも、例えば JavaScript では、添え字演算子に加えてピリオド演算子でもアクセスできます。これを Ruby でも実現できないかと思ってやってみました。
というわけで、まずはソースコード。
このように定義した Hash#objectize! を呼び出すと、そのハッシュオブジェクトに特異メソッドとして method_missing が追加され、未定義のメソッド呼び出しを要素へのアクセスに変換します。例えば、以下のような感じでアクセスできます。
hash = { :foo => "foo" } hash.objectize! p hash.foo # -> "foo" hash.bar = "bar" p hash[:bar] # -> "bar"
ただし、本来のメソッド呼び出しのほうが常に優先されますのでご注意ください。とくに代入と組み合わせるとわけのわからないことになります。
hash = {} hash.objectize! hash.length = 100 p hash.length # -> 0 p hash[:length] # -> 100
なんでこんなことを思いついたかというと、例えば Rails でビューに以下のようなフォームがあるとき。
<% form_for :s, :html => { :method => 'get' } do |t| -%> <%= t.text_field :keyword %> <%= submit_tag %> <% end -%>
コントローラにこう書くだけで
class TestController < ApplicationController def index @s = params[:s] || {} @s.objectize! end end
送信した内容を再びフォームの初期値にしたかったのです。検索フォームとかに便利なんじゃないでしょうかね。
・・・もっと簡単な方法があったら教えてください (^^;
Recommendations
Books
「Closure Library」の入門書です。
詳しくはこちらの記事をどうぞ!
詳しくはこちらの記事をどうぞ!
Categories
一歩進んだ Web アプリケーション活用術
Opera & Firefox をディープに使いこなす
WebOS 時代のプログラミング・ノウハウ
Gentoo Linux と VMware による個人サーバー構築記
オープンソース・アプリケーションで快適 Web ライフ
その他の記事
Recent Articles
この記事にコメントする