ジョギング
- 香椎浜 x 2 周
日課
- お休み
Fukuoka.rb
SRE 本輪読会の会場で Fukuoka.rb も開催されていて、@udzura さんに awspec の generator 実装について質問させて頂いた。
SRE 本輪読会
かっぱさん「俺の仕事は、コードでかたをつけることです」
— P山 (@pyama86) 2018年4月4日
https://t.co/Q1kbBHV9Rr 試してみよう。
— Yohei Kawahara(かっぱ) (@inokara) 2018年4月4日
夕飯
- 輪読会帰りに串かつ
串カツ×ハイボールで今日の振り返りをしているところ。 pic.twitter.com/zOBdIdHGKV
— Yohei Kawahara(かっぱ) (@inokara) 2018年4月4日
今日のるびぃ ~ Ruby 技術者認定試験 Gold 演習問題を解いていく (15) ~
もう何度か解いているけど, Ruby 技術者認定試験合格教本 の演習問題と模擬試験を数問ずつ解いていく. ポイントは, 問題が何について問われているかがちゃんと理解出来ていること.
Q13. オブジェクト指向
以下のコードを実行するとどうなるか.
class A @@x = 0 class << self @@x = 1 def x @@x end end def x @@x = 2 end end class B < A @@x = 3 end p A.x
クラス変数はスーパークラスとサブクラス間で共有されるため...
- 3 が表示される
以下, irb による実行例.
irb(main):001:0> class A irb(main):002:1> @@x = 0 irb(main):003:1> class << self irb(main):004:2> @@x = 1 irb(main):005:2> def x irb(main):006:3> @@x irb(main):007:3> end irb(main):008:2> end irb(main):009:1> def x irb(main):010:2> @@x = 2 irb(main):011:2> end irb(main):012:1> end => :x irb(main):013:0> irb(main):014:0* class B < A irb(main):015:1> @@x = 3 irb(main):016:1> end => 3
以下, 解説より抜粋.
- クラス変数 (@@) はスーパークラス, サブクラス間で共有される
- 設問では, クラス B の @@x = 3 が最終的に適用される
Q14. オブジェクト指向
以下の実行結果になるように, [ x ] に記述する適切なコードを選ぶ.
module M def hoge puts 'hoge' end end class A [ x ] M end A.hoge
実行結果.
hoge
A.hoge
はクラスメソッドなので, モジュール内のメソッドをクラスメソッドとして取り込むには...
- extend
以下, irb による実行例.
... irb(main):011:0* A.hoge hoge => nil
以下, 解説より抜粋.
- モジュール内のメソッドをクラスメソッドとして取り込む場合, extend を利用する
Q15. オブジェクト指向
以下のコードを実行すると何が表示されるか.
class A $a = self def hoge $b = self end end a = A.new print A == $a, A.new == $b
クラス定義中の self は, そのクラスオブジェクトで, インスタンスメソッド中の self はそのクラスのオブジェクトとなるので...
- truefalse
以下, irb による実行例.
irb(main):001:0> class A irb(main):002:1> $a = self irb(main):003:1> def hoge irb(main):004:2> $b = self irb(main):005:2> end irb(main):006:1> end => :hoge irb(main):007:0> irb(main):008:0* a = A.new => #<A:0x0055a85edf61a8> irb(main):009:0> print A == $a, A.new == $b truefalse=> nil
以下, 解説より抜粋.
- クラス定義中の self は, そのクラスのオブジェクトとなる
- インスタンスメソッド中の self は, そのクラスのオブジェクトとなる
$a
にはクラス A が代入されるが,$b
は, hoge が実行されなければ値が代入されない為, nil となる
# hoge を実行すると以下のようになる irb(main):010:0> print A == $a, A.new.hoge == $b truetrue=> nil
フムフム