ジョギング
- 香椎浜 x 2 周
日課
- (腕立て x 50 + 腹筋 x 50) x 3
豚汁
- 奥さんお手製のお味噌で豚汁
- うまかった!
今日のるびぃ ~ Ruby 技術者認定試験合格教本 (Silver/Gold 対応) Ruby 公式資格教科書 模擬試験 (11) 文法 (1) ~
irb に動作確認環境は以下の通り.
$ ruby --version ruby 2.1.10p492 (2016-04-01 revision 54464) [x86_64-linux] $ irb --version irb 0.9.6(09/06/30)
文法 (1)
Q1. 以下のコードを実行するとどうなるか.
[1, 2, 3].each do |i| num = i end puts num
以下, 解答.
- 例外発生
以下, irb にて確認.
irb(main):001:0> [1, 2, 3].each do |i| irb(main):002:1* num = i irb(main):003:1> end => [1, 2, 3] irb(main):004:0> irb(main):005:0* puts num NameError: undefined local variable or method `num' for main:Object
以下, 解説より抜粋.
each
ブロック内で宣言した変数は, ブロック外で無効となる- 無効となる為, 例外 (NameError) が発生する
文法 (2)
Q4. 以下のコードを実行するとどうなるか.
ary = Array.new(3, 'a') ary[0].next! p ary
以下, 解答.
- ["b", "b", "b"] と表示
以下, irb にて確認.
irb(main):001:0> ary = Array.new(3, 'a') => ["a", "a", "a"] irb(main):002:0> ary[0].next! => "b" irb(main):003:0> p ary ["b", "b", "b"] => ["b", "b", "b"]
以下, 解説より抜粋.
Array.new(3, 'a')
は, サイズ 3 の配列を生成し, 文字列オブジェクト "a" を全ての要素に設定する- 文字列オブジェクト "a" は全て同一のオブジェクトになり, 配列の要素は, すべて同一の文字列オブジェクト "a" を参照する
- その為, 1 つの要素を変更すると, すべての要素が変更される
文法 (3)
Q7. 以下のコードで, case
文の比較に使用されている演算子はどれか.
a = [1, 'Hello', false] a.each do |x| puts case x when String then 'string' when Numeric then 'number' when TrueClass, FalseClass then 'boolean' end end
以下, 解答.
以下, irb にて確認.
irb(main):001:0> a = [1, 'Hello', false] => [1, "Hello", false] irb(main):002:0> a.each do |x| irb(main):003:1* puts case x irb(main):004:2> when String then 'string' irb(main):005:2> when Numeric then 'number' irb(main):006:2> when TrueClass, FalseClass then 'boolean' irb(main):007:2> end irb(main):008:1> end number string boolean => [1, "Hello", false]
以下, 解説より抜粋.
- case 文の比較には,
===
を利用する
文法 (4)
Q10. 4 行目で生成 (raise) される例外オブジェクトのクラスは何ですか.
begin 'cat'.narrow rescue NameError raise end
以下, 解答.
- NoMethodError
以下, irb にて確認.
irb(main):001:0> begin irb(main):002:1* 'cat'.narrow irb(main):003:1> rescue NameError irb(main):004:1> raise irb(main):005:1> end NoMethodError: undefined method `narrow' for "cat":String ...
以下, 解説より抜粋.
rescue
節のraise
は,rescue
節が処理中の例外オブジェクトを再生成する- オブジェクトに存在しないメソッドを実行した場合,
NoMethodError
オブジェクトが発生する - 出題コードの 2 行目で
NoMethodError
オブジェクトが発生するので, 3 行目以降のrescue
節でキャッチしたNoMethodError
オブジェクトがraise
される