組み込みクラスなどを拡張して使いやすい形に拡張してくれている。
rails以外でも以下のrequireを追加すれば使える。
rails以外でも以下のrequireを追加すれば使える。
require 'rubygems' require 'active_support'
組み込みクラスのInteger, Floatを拡張してより自然な形で数値の演算ができる。
複数形でも単数形でも両方同じように使える
複数形でも単数形でも両方同じように使える
p 2.year + 5.month + 10.week + 3.day + 1.hour + 30.minute + 10.second p 2.years + 5.months + 10.weeks + 3.days + 1.hours + 30.minutes + 10.seconds
group_by との違いはindex_byは値が一つだけでgroup_byは値が配列になっている。
# コレクションをハッシュに分類する。 # ハッシュのキーはブロック内の返り値 p (0..10).index_by { |i| (97 + i).chr } Person = Struct.new(:name) p %w|taro jiro saburo|.map { |name| Person.new(name) # group_by と同じように &:属性の形で省略できる }.index_by(&:name)
{"k"=>10, "a"=>0, "b"=>1, "c"=>2, "d"=>3, "e"=>4, "f"=>5, "g"=>6, "h"=>7, "i"=>8, "j"=>9} {"taro"=>#<struct Person name="taro">, "jiro"=>#<struct Person name="jiro">, "saburo"=>#<struct Person name="saburo">}
# 引数の中のオブジェクトをブロックの2番目の引数に入れて # ブロックの処理が終われば引数のオブジェクトを返す処理 p (0..10).each_with_object({}) { |i, hash| hash[i] = i }
{5=>5, 0=>0, 6=>6, 1=>1, 7=>7, 2=>2, 8=>8, 3=>3, 9=>9, 4=>4, 10=>10}ソースを直接見たほうが早いという説もある
def each_with_object(memo, &block) memo.tap do |m| each do |element| block.call(element, m) end end endtapについてこちらを参照?
class Test # 引数の最後がハッシュを受け取るメソッドならどれにでも使える def say str, options = {} puts "=====================" puts str options.each { |k, v| puts k.to_s + ": " + v.to_s } puts "=====================" end end t = Test.new t.say("index", :controller => "admin", :action => "index") t.say("show", :controller => "admin", :action => "show") t.with_options(:controller => "admin") { |admin_map| # 薄いラッパーのような形になるので、ブロック引数は呼び出したオブジェクトとして扱える。 admin_map.say "new", :action => "new" admin_map.say "edit", :action => "edit" }
===================== index action: index controller: admin ===================== ===================== show action: show controller: admin ===================== ===================== new action: new controller: admin ===================== ===================== edit action: edit controller: admin =====================
http://doruby.kbmj.com/yoppi_on_rails/20080226/Rai...
メソッド名 | 説明 | 拡張元 |
---|---|---|
blank? | 空文字列やnilなどをまとめてチェックする | Object |
many? | コレクションのサイズが一つ以上かどうか | Enumerable |
to_json | json形式に変換する | Object |
to_yaml | yaml形式に変換する | Object |
stringify_keys | ハッシュのキーをシンボルから文字列に変える | Hash |
symbolize_keys | ハッシュのキーを文字列からシンボルに変える | Hash |
slice | 引数で指定したキーのみを取り出す | Hash |
except | 引数で指定したキー以外を取り出す | Hash |
reverse_merge | mergeと違って既にキーが存在している場合は変更しない。デフォルト値で初期化するときなどに使う | Hash |
deep_merge | 二つのハッシュを再帰的にマージして(引数の方のHashが上書きする)新しいHashを返す | Hash |
diff | 二つのハッシュの差分をとって(引数の方のHashが上書きしない)新しいHashを返す | Hash |
singularize | 文字列を単数形にする | String |
pluralize | 文字列を複数形にする | String |
camelize | 小文字とアンダーバーで表現された単語を、大文字と小文字での表現に変換して返す | String |
classify | テーブル名をクラス名にする | String |
tableize | クラス名をテーブル名にする | String |
constantize | 同じ文字列の定数を返す。クラス名も定数なのでクラス名にするとクラスオブジェクトを返す | String |
最新コメント