ruby学習メモ
オブジェクトの凍結(#freeze)
test1 = "string" test2 = test1 test1.freeze # 凍結 test2[0] = "A"
test1が参照する文字列は凍結されているので TypeError が発生する
TypeError: can't modify frozen string from (irb):33:in `[]=' from (irb):33 from :0
オブジェクトの複写(#dup)
以下のように test2 に対して複写したオブジェクトを割り当てた場合、
凍結された test1 ではなく複写された test2 のオブジェクトに対して操作するためエラーは出ない
test1 = "string" test2 = test1.dup test1.freeze # 凍結 test2[0] = "A"
配列
irb(main):090:0* a = [ 3.14159, "pie", 99 ] #a = %{ 3.14159 pie 99 } => [3.14159, "pie", 99] irb(main):091:0> a.class => Array irb(main):092:0> a.length => 3 irb(main):093:0> a[0] => 3.14159 irb(main):094:0> a[0].class => Float irb(main):095:0> a[1] => "pie" irb(main):096:0> a[1].class => String irb(main):097:0> a[2] => 99 irb(main):098:0> a[2].class => Fixnum irb(main):099:0> a[3] => nil irb(main):100:0> a[3].class => NilClass
配列の検索
以下のように配列の中身を検索するコードは
for i in 0...@songs.length return @songs[i] if title == @songs[i].name end return nil
以下のようにイテレーション機能の #find を利用して置き換えることが出来る
@songs.find {|song| title == song.name }