ジョギング
- 香椎浜 x 2 周
- んー, ずっと左足甲, 足底筋が痛い
日課
- (腕立て x 50 + 腹筋 x 50) x 3
今日のるびぃ ~ Ruby 技術者認定試験 Gold 演習問題を解いていく (12) ~
もう何度か解いているけど, Ruby 技術者認定試験合格教本 の演習問題と模擬試験を数問ずつ解いていく. ポイントは, 問題が何について問われているかがちゃんと理解出来ていること.
今日から模擬試験を解いていく.
Q1. 文法
以下のコードを実行するとどうなるか.
[1, 2, 3].each do |i| num = i end puts num
- 例外が発生する
why?
- 変数 num は each ブロック内でのみ有効となる
- 初期化されていない 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> puts num NameError: undefined local variable or method `num' for main:Object from (irb):4 from /home/kappa/.rbenv/versions/2.1.10/bin/irb:11:in `<main>'
Q2. 標準添付ライブラリ
次のコードを実行するとどうなるか. 該当するものを全て選ぶ.
a = 1.0 + 1 a = a + (1 / 2r) a = a + (1 + 2i)
why?
- Integer インスタンスと Float インスタンスの演算結果は Float となる
- Float インスタンスと Rational インスタンスの演算は Float となる
- Float インスタンスと Complex インスタンスの演算は Complex となる
irb で確認
irb(main):005:0> a = 1.0 + 1 => 2.0 irb(main):006:0> a.class => Float irb(main):007:0> a = a + (1 / 2r) => 2.5 irb(main):008:0> a.class => Float irb(main):009:0> a = a + (1 + 2i) => (3.5+2i) irb(main):010:0> a.class => Complex
Q3. オブジェクト指向
以下のコードを実行するとどうなるか.
class A private def hoge puts 'A' end end class B < A public :hoge end B.new.hoge
- A と表示される
why?
スーパークラス A の private メソッド hoge は, サブクラス B において public メソッドに再定義されている為, 外部からの呼び出しに対して応答出来る.
irb で確認
irb(main):001:0> class A irb(main):002:1> private irb(main):003:1> def hoge irb(main):004:2> puts 'A' irb(main):005:2> end irb(main):006:1> end => :hoge irb(main):007:0> irb(main):008:0* class B < A irb(main):009:1> public :hoge irb(main):010:1> end => B irb(main):011:0> irb(main):012:0* B.new.hoge A => nil