ジョギング
- 雨の為, 休み
- 左膝内側の痛みが引かない...
日課
- (腕立て x 50 + 腹筋 x 30) x 3
久しぶりに
- 夕飯は鍋だった
今日のるびぃ ~ Ruby 技術者認定試験 Gold 演習問題を解いていく (2) ~
もう何度か解いているけど, Ruby 技術者認定試験合格教本 の演習問題と模擬試験を数問ずつ解いていく. ポイントは, 問題が何について問われているかがちゃんと理解出来ていること.
Q4. 文法 (例外)
以下のコードを実行するとどうなるか.
class Err1 < StandardError; end class Err2 < Err1; end begin raise Err2 rescue => e puts 'StandardError' rescue Err2 => ex puts ex.class end
- StandardError と表示される
以下, 解説より抜粋.
- raise Err2 している時点で例外オブジェクトのクラスは Err2 となるが, 5 行目の resucue 節で StandardError から派生する全ての例外が捕捉される
以下, 実行結果.
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
Err2 の例外のみを捕捉したい場合には, 以下のように書くべき??
class Err1 < StandardError; end class Err2 < Err1; end begin raise Err2 rescue Err2 => ex puts ex.class rescue => e puts 'StandardError' end
尚, 例外クラスを指定しない場合, StandardError と, そのサブクラスが捕捉の対象となる.
Q5. 文法 (定数)
以下のコードを実行するとどうなるか.
class C VAR = 0 def VAR=v VAR = v end def VAR VAR end end c = C.new c.VAR = 3 puts c.VAR
- 4 行目でエラーが発生する (メソッド内での定数更新はエラーとなる)
以下, 実行例.
irb(main):001:0> class C irb(main):002:1> VAR = 0 irb(main):003:1> def VAR=v irb(main):004:2> VAR = v irb(main):005:2> end irb(main):006:1> def VAR irb(main):007:2> VAR irb(main):008:2> end irb(main):009:1> end Traceback (most recent call last): 1: from /home/kappa/.rbenv/versions/2.5.0/bin/irb:11:in `<main>' SyntaxError ((irb):4: dynamic constant assignment VAR = v ^)
Q6. 文法
以下のコードの中で文法として正しいものを全て選ぶ.
1.upto 5 do |x| puts x end 1.upto(5) do |x| puts x end 1.upto(5) {|x| puts x }
以下, 実行例.
irb(main):001:0> 1.upto 5 do |x| puts x end 1 2 3 4 5 => 1 irb(main):002:0> 1.upto(5) do |x| puts x end 1 2 3 4 5 => 1 irb(main):003:0> 1.upto(5) {|x| puts x } 1 2 3 4 5 => 1
以下, 解説より抜粋.
- ブロック引数を
{ }
で囲む場合には, 引数の()
を省略することが出来ない - ブロック引数を
do ~ end
で囲む場合には, 引数の()
は省略可能