ジョギング
- 香椎浜 x 1 周
- 左ひざの内側、左足の足底筋痛みがあった為、1 周で止めといた
日課
- 休み
体調
- だいぶん良くなった
博多
- 奥さんと博多をぶらぶら
- しまむら楽器のカラオケ大会の審査員を飛び入りでしたりして、結構、内容の濃い一日だった
はじめの一歩
- 奥さんと二人で色々と悩み抜いた末に一歩を踏み出すことにした
- 奥さんには苦労をかけるかもしれないけど、後悔しないようにする為の一歩
今日のるびぃ ~ Ruby 技術者認定試験 Gold 演習問題を解いていく (7) ~
もう何度か解いているけど, Ruby 技術者認定試験合格教本 の演習問題と模擬試験を数問ずつ解いていく. ポイントは, 問題が何について問われているかがちゃんと理解出来ていること.
Q19. オブジェクト指向
以下のコードを実行すると何が表示されるか.
class Object X = "X" def self.const_missing a p "#{a}" end end Y
トップクラスで定義された定数は Object クラスに所属する, Y は初期化されていない定数だが, Object クラスの const_missing が定義されているので, 以下のように出力されるはず.
Y
以下, irb での実行例.
irb(main):007:0> Y "Y" => "Y"
Q20. オブジェクト指向
以下の実行結果になるように, [ x ] に記述する適切なコードを選ぶ.
class C def hoge puts 'A' end end module M refine C do def hoge puts 'B' end end end c = C.new c.hoge [ x ] M c.hoge
以下, 実行結果.
A B
module M で定義されている refinement を利用する場合, [ x ] に入るのは...
using
になるはず.
以下, irb での実行例.
irb(main):015:0* c = C.new => #<C:0x00562131b0fe48> irb(main):016:0> c.hoge A => nil irb(main):017:0> using M; c.hoge B => nil
ちなみに, Module#refine のドキュメントより抜粋.
引数 klass で指定したクラスだけに対して、ブロックで指定した機能を提供で きるモジュールを定義します。定義した機能は Module#refine を使用せずに直 接 klass に対して変更を行う場合と異なり、限られた範囲のみ有効にできます。
using が有効になる範囲は以下の通り.
- クラス・モジュール定義外で呼び出し場合はファイルの末尾まで
- クラス・モジュール定義の中で呼び出した場合はそのクラス・モジュール定義の末尾まで
Q21. 組み込みライブラリ
Kernel モジュールのメソッドについて, 正しい記述を選ぶ.
- require は拡張子無しでファイルをロード出来る
- dup は特異メソッド等の情報をコピーしない
その他の選択肢について...
load は同じファイルを複数回ロードしない...わけでは無い => 複数回ロードする.
$ cat file1.rb # file1.rb $var += 1 $ irb irb(main):001:0> $var = 0 => 0 irb(main):002:0> load 'file1.rb' => true irb(main):003:0> load 'file1.rb' => true irb(main):004:0> p $var 2 => 2
freeze を実行すると, そのクラスはインスタンス化出来なくなる...わけでは無い => インスタンス化出来る.
irb(main):001:0> class Foo1; end => nil irb(main):002:0> Foo1.freeze => Foo1 irb(main):003:0> Foo1.new => #<Foo1:0x005602b4c25a58> irb(main):004:0> Foo1.frozen? => true
フムフム