ぞえの技術めも

Ruby on Rails勉強中

【29日目】【1日20分のRailsチュートリアル】第4章の演習(2.~4.)

Ruby on Railsチュートリアル(第3版)

今日は「4.6 演習」の2.から。

4.6 演習

2.リスト4.15を参考にして、上で作成したshuffleメソッドを Stringクラスに追加してください。

できたー。追加するだけ。

>> class String
>>   def shuffle
>>     self.split('').shuffle.join
>>   end
>> end
=> :shuffle
>> "foobar".shuffle
=> "oarobf"

3.person1、person2、person3という3つのハッシュを作成してください。それぞれのハッシュには:firstキーと:lastキーを与え、さらにそれぞれのキーに名前と名字を値として割り当ててください。
次にparamsハッシュを作成し、params[:father]はperson1、params[:mother]はperson2、そしてparams[:child]は person3になるようにしてください。
最後に、params[:father][:first]などが正しい値を持っていることを確認してください。

ハッシュなので「4.3.3 ハッシュとシンボル」見つつ作る。

まずperson1person2person3という3つのハッシュを作成しよう。

>> person1 = { first: "Taro", last: "Yamada" }                                                                                                                       
=> {:first=>"Taro", :last=>"Yamada"}
>> person2 = { first: "Hanako", last: "Yamada" }
=> {:first=>"Hanako", :last=>"Yamada"}
>> person3 = { first: "Ichiro", last: "Yamada" }                                                                                                                     
=> {:first=>"Ichiro", :last=>"Yamada"}

山田家にした。

次にparamsハッシュを作成して、それぞれを割り当てる。

>> params[:father] = person1
=> {:first=>"Taro", :last=>"Yamada"}
>> params[:mother] = person2
=> {:first=>"Hanako", :last=>"Yamada"}
>> params[:child] = person3
=> {:first=>"Ichiro", :last=>"Yamada"}

できたのでparams[:father][:first]などが正しい値を持っていることを確認。

>> params[:father][:first]
=> "Taro"
>> params[:mother][:last]
=> "Yamada"

4.Ruby API のオンラインマニュアルを見つけて、Hashクラスのmergeメソッドについて読んでみてください。では、次の式の値は何ですか?

  { "a" => 100, "b" => 200 }.merge({ "b" => 300 })

まずCloudIDEで使っているRubyのバージョンを確認。

$ ruby --version 
ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-linux]

2.3.0らしい。ということでマニュアルはこれ?

オブジェクト指向スクリプト言語 Ruby リファレンスマニュアル (Ruby 2.3.0)

でもここからHashクラスのmergeメソッドに辿りつけなかったので別途ぐぐった…。

class Hash (Ruby 2.3.0)

selfとotherのハッシュの内容をマージ(統合)した結果を返します。デフォルト値はselfの設定のままです。

self と other に同じキーがあった場合はブロック付きか否かで 判定方法が違います。ブロック付きのときはブロックを呼び出して その返す値を重複キーに対応する値にします。ブロック付きでない 場合は常に other の値を使います。

同じキー(:b)があって、ブロック付きではないので引数の値が使われる、のかな。

{ "a" => 100, "b" => 300 }になると予想。

Railsコンソールで動作確認。

>> { "a" => 100, "b" => 200 }.merge({ "b" => 300 })
=> {"a"=>100, "b"=>300}

正解!

ということでこれで第4章の演習が終了。
今日の作業時間は【33分】

次は「第5章 レイアウトを作成する」から。
やっと5章。まだ半分にも満たない。道のり長いな~