ジョギング
- お休み
日課
- (腕立て x 50 + 腹筋 x 50) x 3
天神でお仕事
- オルターブースさんのスペースを間借りして作業
- いつもとは違うスペースなので, いい感じの気分転換になっていつもよりも仕事が捗った気がする
夕飯
今日のるびぃ ~ Ruby 技術者認定試験合格教本 (Silver/Gold 対応) Ruby 公式資格教科書 模擬試験 (15) 文法 (5) ~
irb に動作確認環境は以下の通り.
$ ruby --version ruby 2.1.10p492 (2016-04-01 revision 54464) [x86_64-linux] $ irb --version irb 0.9.6(09/06/30)
文法 (13)
Q35. 可変長引数について適切な記述を選べ.
以下, 解答.
- 可変長引数には
*
を付ける
以下, irb にて確認.
irb(main):001:0> def foo(*arg) irb(main):002:1> p arg.class irb(main):003:1> p arg irb(main):004:1> p *arg irb(main):005:1> end => :foo irb(main):006:0> foo(1, 2, 3, 4, 5) Array [1, 2, 3, 4, 5] 1 2 3 4 5 => [1, 2, 3, 4, 5] irb(main):007:0>
以下, 解説より抜粋.
- 可変長引数にはデフォルト値の指定出来ない
- 引数は配列として扱われる
- 可変長引数は一つのメソッドに一つしか指定出来ない
文法 (14) 以降は, 基礎力確認問題を解く
Q2. 以下のコードを実行すると何が表示されるか.
x, *y = *[0, 1, 2] p x, y
以下, 解答.
- 0 <改行> [1, 2]
以下, irb にて確認.
irb(main):007:0> x, *y = *[0, 1, 2] => [0, 1, 2] irb(main):008:0> p x, y 0 [1, 2] => [0, [1, 2]]
- 多重代入
- 右辺の
*
は無視して構わない - 左辺の
x
には, 配列の最初の要素が格納され,y
には*
が付いているので残りの要素が配列として格納される
文法 (15)
Q3. [ x ] に記述すると, 以下の実行結果にならないコードを全て選べ.
# コード puts [ x ] # 実行結果 0.8
以下, 解答.
- 4/5
- 4/5r
以下, irb にて確認.
irb(main):001:0> 4/5 => 0 irb(main):002:0> 4.0/5 => 0.8 irb(main):003:0> 4/5r => (4/5) irb(main):004:0> 4/5.0 => 0.8 irb(main):005:0> (4/5r).to_f => 0.8
以下, 解説より抜粋.
- 整数 (Integer) 同士の演算結果は整数となり, 小数点以下は丸められる為, 選択肢 1 の結果は 0 になる
- 選択肢 3 の 4/5r の結果は Rational クラスのオブジェクトを生成し, (4/5r).to_f とすれば 0.8 となる
文法 (16)
Q4. 以下のコードを実行するとどうなるか.
class Err1 < StandardError; end class Err2 < Err1; end begin raise Err2 rescue => e puts 'StandardError' rescue Err2 => ex puts ex.class end
以下, 解答.
- StandardError と表示される
以下, irb にて確認.
irb(main):001:0> class Err1 < StandardError; end => nil irb(main):002:0> class Err2 < Err1; end => nil irb(main):003:0> begin irb(main):004:1* raise Err2 irb(main):005:1> rescue => e irb(main):006:1> puts 'StandardError' irb(main):007:1> rescue Err2 => ex irb(main):008:1> puts ex.class irb(main):009:1> end StandardError => nil
以下, 解説より抜粋.
- 設問において, begin 節の raise で発生する例外オブジェクトは Err2 である
rescue Err2 => ex
では Err2, もしくは Err2 を継承した例外オブジェクトを対象とするように書かれているが...rescue => e
にてStandardError
から派生する全ての例外を捕捉する為, このrescue => e
で処理される
フムフム.