ジョギング
- 香椎浜 x 2 周
- なんかギクシャクした感じがずーっと続いている
日課
- (腕立て x 50 + 腹筋 x 50) x 3
夕飯
- 奥さんが得意としている麻婆茄子
- 美味しかった
終日
- 色々とやりたいことがあったけど, 体調がイマイチで終日ダラダラしていた
今日のるびぃ ~ REx - Ruby Examination にチャレンジ (47) ~
REx - Ruby Examination の問題を自分なりにアレンジした上で 1 〜 3 問くらいずつ解いていく. 正直言ってかなり難しい. 尚, irb に動作確認環境は以下の通り.
$ ruby --version ruby 2.1.10p492 (2016-04-01 revision 54464) [x86_64-linux] $ irb --version irb 0.9.6(09/06/30)
メソッドの可視性
以下のコードを実行するとどうなるか.
class C protected def initialize end end p C.new.methods.include? :initialize
以下, 解答.
true
以下, irb にて確認.
irb(main):001:0> class C irb(main):002:1> protected irb(main):003:1> def initialize irb(main):004:2> end irb(main):005:1> end => :initialize irb(main):006:0> irb(main):007:0* p C.new.methods.include? :initialize true => true
以下, 解説より抜粋.
initialize
メソッドはprivate
メソッドであるprotected
メソッドは仲間クラス (自クラスかサブクラスのレシーバー) へ公開されているが, それ以外のクラスには隠蔽されている- 仲間クラスから参照するために, メソッドとしては公開されている
Object#methods
はpublic
及びprotected
メソッドの名前を返す
以下, private
や public
だった場合の確認.
irb(main):001:0> class C irb(main):002:1> public irb(main):003:1> def initialize irb(main):004:2> end irb(main):005:1> end => :initialize irb(main):006:0> irb(main):007:0* p C.new.methods.include? :initialize false => false irb(main):008:0> p C.new.private_methods.include? :initialize true => true
前述の通り, initialize
メソッドは private
メソッドであり, public
を明示的に指定しても private
のまま. protected
を指定すると, initialize
メソッドは protected
メソッドになる. 尚, private
を指定するパターンは割愛.
正規表現
以下のコードを実行するとどうなるか.
p "Matz is my tEacher".scan(/[is|my]/).length
以下, 解答.
4 が出力される
以下, irb にて確認.
irb(main):001:0> p "Matz is my tEacher".scan(/[is|my]/).length 4 => 4
以下, 解説より抜粋.
String#scan
はマッチした部分文字列を配列で返す- 正規表現の
[]
は囲まれた文字 1 つ 1 つにマッチする |
は正規表現ではOR
のメタ文字である- 設問では,
|
が[]
に囲まれているため, これもマッチ対象となる
尚, String#scan
については, 以下の通り.
self に対して pattern を繰り返しマッチし、 マッチした部分文字列の配列を返します。 pattern が正規表現で括弧を含む場合は、 括弧で括られたパターンにマッチした部分文字列の配列の配列を返します。
以下, String#scan
のみの実行結果.
irb(main):002:0> p "Matz is my tEacher".scan(/[is|my]/) ["i", "s", "m", "y"] => ["i", "s", "m", "y"]
以下, String#scan
で色々確認.
irb(main):005:0> p "Matz is my tEacher".scan(/my/) ["my"] => ["my"] irb(main):006:0> p "Matz is my tEacher".scan(/[my]/) ["m", "y"] => ["m", "y"] irb(main):007:0> p "Matz is my tEacher".scan(/is/) ["is"] => ["is"] irb(main):008:0> p "Matz is my tEacher".scan(/[is]/) ["i", "s"] => ["i", "s"] irb(main):009:0> p "Matz is my tEacher".scan('is') ["is"] => ["is"] irb(main):010:0> p "Matz is my tEacher".scan('my') ["my"] => ["my"]
フムフム.