- ジョギング
- 日課
- foo, bar, baz, その後って...
- 東京出張
- sidekiq
- Python で何かを作る時の作法とか
- 今日のるびぃ ~ Ruby 技術者認定試験 Gold 演習問題を解いていく (21) ~
ジョギング
- お休み
日課
- お休み
foo, bar, baz, その後って...
foo, bar, baz... その先にあるものとは https://t.co/5etccmi2W0
— Yohei Kawahara(かっぱ) (@inokara) 2018年4月10日
RFC に明記されているらしい.
東京出張
- だいぶん飛行機が揺れた
- 東京も暖かくて T シャツで過ごせる感じ ( 夜は寒いけど
- 打ち合わせがキャンセルになってしまったので, 色々と課題となっていたタスクについて, 技術的な検証等を行った
- 夜は会社の中途採用イベントを見学
- その後, 前前職の同僚と新橋の馬肉料理屋さんで一杯, 色々と懐かしい話に花が咲いた
sidekiq
- 非同期処理を実装する必要があって, sidekiq を試してみたけど動かすことが出来なかった
- ちゃんとドキュメントを読んで, チュートリアルからやるべきだった...
Python で何かを作る時の作法とか
Python でライブラリ (書いたことないけど) や, スクリプトを実装する際の作法を身に付けたくて, テストの書き方や, 複数の Python バージョンでテストが実行出来るように試行錯誤している.
mock を使ったり, tox と Travis CI で複数の Python バージョンでテストさせたりしているけど, まだ何となくしか理解出来ていない感じ. 引続き, 手を動かしていきたいと思う.
今日のるびぃ ~ Ruby 技術者認定試験 Gold 演習問題を解いていく (21) ~
もう何度か解いているけど, Ruby 技術者認定試験合格教本 の演習問題と模擬試験を数問ずつ解いていく. ポイントは, 問題が何について問われているかがちゃんと理解出来ていること.
Q31. オブジェクト指向
B
と出力するコードを全て選べ.
#1. class Object def self.const_missing a p "#{a}" end end B #2. class Module def self.const_missing a p "#{a}" end end B #3. class Hoge def self.const_missing a p "#{a}" end end Hoge::B #4. class Hoge def self.const_missing a p "#{a}" end end B
- と 3.
以下, irb での実行例.
irb(main):001:0> class Object irb(main):002:1> def self.const_missing a irb(main):003:2> p "#{a}" irb(main):004:2> end irb(main):005:1> end => :const_missing irb(main):006:0> B "B" => "B" irb(main):007:0> class Hoge irb(main):008:1> def self.const_missing a irb(main):009:2> p "#{a}" irb(main):010:2> end irb(main):011:1> end => :const_missing irb(main):012:0> Hoge::B "B" => "B"
以下, 解説より抜粋.
- const_missing は, クラスに定数が定義されていない場合に呼び出されるメソッド
- const_missing を定義することで, 存在しない定数にアクセスした場合の任意の処理を実行出来る
2 は Module クラスに const_missing を定義しており, 4 は Hoge クラスに const_missing を定義しているが, 呼び出している定数 B はトップレベル (Object クラス) の定数 B を呼び出している為, デフォルトの const_missing (NameError) が発生する.
irb(main):001:0> class Module irb(main):002:1> def self.const_missing a irb(main):003:2> p "#{a}" irb(main):004:2> end irb(main):005:1> end => :const_missing irb(main):006:0> B NameError: uninitialized constant B ... irb(main):007:0> class Hoge irb(main):008:1> def self.const_missing a irb(main):009:2> p "#{a}" irb(main):010:2> end irb(main):011:1> end => :const_missing irb(main):012:0> B NameError: uninitialized constant B
Q32. 文法
以下の実行結果になるように, [ x ] に記述する適切なコードを全て選べ.
class Err1 < StandardError; end class Err2 < Err1; end begin [ x ] rescue Err1 => ex puts 'Error' end
以下, 出力結果.
Error
- raise Err1
- raise Err2
以下, irb での実行例.
irb(main):001:0> class Err1 < StandardError; end => nil irb(main):002:0> class Err2 < Err1; end => nil irb(main):003:0> irb(main):004:0* begin irb(main):005:1* raise Err1 irb(main):006:1> rescue Err1 => ex irb(main):007:1> puts 'Error' irb(main):008:1> end Error => nil irb(main):009:0> begin irb(main):010:1* raise Err2 irb(main):011:1> rescue Err1 => ex irb(main):012:1> puts 'Error' irb(main):013:1> end Error => nil
以下, 解説より抜粋.
rescue Err1
は, Err1 と Err1 のサブクラス (Err2) の例外を捕捉する
Q33. オブジェクト指向
以下のコードを実行するとどうなるか.
class Root def m puts 'Root' end end class A < Root def m puts 'A' end end class B < A def m puts 'B' end undef m end B.new.m
- 例外発生
以下, irb による実行例.
irb(main):001:0> class Root irb(main):002:1> def m irb(main):003:2> puts 'Root' irb(main):004:2> end irb(main):005:1> end => :m irb(main):006:0> irb(main):007:0* class A < Root irb(main):008:1> def m irb(main):009:2> puts 'A' irb(main):010:2> end irb(main):011:1> end => :m irb(main):012:0> irb(main):013:0* class B < A irb(main):014:1> def m irb(main):015:2> puts 'B' irb(main):016:2> end irb(main):017:1> undef m irb(main):018:1> end => nil irb(main):019:0> irb(main):020:0* B.new.m NoMethodError: undefined method `m' for #<B:0x0056183afc5578>
以下, 解説より抜粋.
B#m
は undef により定義が取り消されているB.new.m
を実行すると例外 NoMethodError が発生する
フムフム.