ようへいの日々精進XP

よかろうもん

2018 年 04 月 23 日(月)

ジョギング

  • 香椎浜 x 2 周
  • んー、体中に疲れが溜まっている感じ

日課

  • なんか, 体中が張ってるし, キツかったのでお休み

夕飯

  • パスタを作る
  • トメイトとしらすをいれたりしたら, なかなか美味しい感じに作れた

今日のるびぃ ~ Ruby技術者認定試験【Gold】模擬問題を解いてみる (re: 2) ~

もう何度か解いているけど, 再び, Ruby技術者認定試験【Gold】模擬問題 を 3 ~ 5 問くらいずつ解いていく.

Q4. 文法

以下のコードを実行した結果を選択する.

# コード
a,  *b = *[1, 2, 3]
p a
p b

以下のように出力されるはず.

1
[2, 3]

以下, irb での実行結果.

irb(main):001:0> a,  *b = *[1, 2, 3]
=> [1, 2, 3]
irb(main):002:0> p a
1
=> 1
irb(main):003:0> p b
[2, 3]
=> [2, 3]

以下, 解説より抜粋.

  • 配列の頭に * を付けると要素を展開することができる
  • 代入式の左辺の変数の先頭に * を指定する (*b) と複数の要素を配列に集約して受け取ることが出来る

以下のように実行しても, 正答と同じ結果が得られる.

irb(main):004:0> a,  *b = [1, 2, 3]
=> [1, 2, 3]
irb(main):005:0> a
=> 1
irb(main):006:0> b
=> [2, 3]

Q5. 定数へのアクセス

以下のコードの実行結果から __(1)__ に当てはまるものを選択する.

# コード
module M
  CONST = "HELLO"
end
puts __(1)__

# 実行結果
HELLO

以下が __(1)__ に該当する.

  • ::M::CONST

以下, irb での実行結果.

irb(main):001:0> module M
irb(main):002:1>   CONST = "HELLO"
irb(main):003:1> end
=> "HELLO"
irb(main):004:0> puts ::M::CONST
HELLO
=> nil
  • 定数にアクセスする場合 :: という記号を利用する
  • モジュールによって定数の名前空間が分かれている為, モジュール::定数 というフォーマットでアクセスする
  • モジュールやクラスなどの定義の一番外側の領域を トップレベル と呼ぶ
  • トップレベルより定数にアクセスする場合は ::モジュール::定数 というフォーマットでアクセスする

Q6. 例外処理

以下のコードを実行した結果を選択する.

# コード
class Error1 < StandardError; end
class Error2 < Error1; end
begin
  raise Error2
rescue Error1 => ex
  puts ex.class
end

以下のように出力されるはず.

Error2

以下, irb での実行結果.

irb(main):001:0> class Error1 < StandardError; end
=> nil
irb(main):002:0> class Error2 < Error1; end
=> nil
irb(main):003:0> begin
irb(main):004:1*   raise Error2
irb(main):005:1> rescue Error1 => ex
irb(main):006:1>   puts ex.class
irb(main):007:1> end
Error2
=> nil

以下, 解説より抜粋.

  • rescue 節で捕捉できる例外は、指定した例外クラス及び, そのサブクラス (設問では Error1 が指定されていて, そのサブクラスである Error2 も該当)
  • Erro1 が捕捉する例外として指定されているが, raise Error2 で Error2 の例外を発生させている為、 Error2 の 例外を捕捉することが出来る

ちなみに, 以下のように Error 1 を raise して, Error1 を rescue しているので, Error1 が出力される.

irb(main):008:0> class Error1 < StandardError; end
=> nil
irb(main):009:0> class Error2 < Error1; end
=> nil
irb(main):010:0> begin
irb(main):011:1*   raise Error1
irb(main):012:1> rescue Error1 => ex
irb(main):013:1>   puts ex.class
irb(main):014:1> end
Error1
=> nil

レイガイガイマイチリカイデキテイナイ.....