ジョギング
日課
- (腕立て x 50 + 腹筋 x 50) x 3
放送大学レポート提出
このレポートを出さないと単位認定試験を受けることが出来ないということで頑張った. そして, LaTeX で作成したった.
LaTeX 楽しかった.
担々麺
ランチは近所の担々麺. 自分が食べた担々麺の中でかなり上位に食い込んでくる美味しさ.
今日のるびぃ ~ REx - Ruby Examination にチャレンジ (10) ~
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 Object CONST = "10" def const_succ CONST.succ! end end class Cls1 const_succ class << self const_succ end end class Cls2 const_succ def initialize const_succ end end Cls1.new Cls2.new p Object::CONST
15 が出力される
以下, irb にて動作確認.
irb(main):023:0> p Object::CONST "15" => "15"
以下, 解説より抜粋.
- Object クラスにメソッドを定義すると, 特異クラスでもそのメソッドを利用することが出来る
- 設問のプログラムを順に実行すると, 答えは
15
になる String#succ
メソッドは self の「次の」文字列を返す- 定数 CONST に対して, 破壊的メソッド
succ!
を呼び出している為, CONST の値はカウントアップされる
以下, 諸々確認.
# Object クラスにメソッドを定義 irb(main):001:0> class Object irb(main):002:1> CONST = "10" irb(main):003:1> def const_succ irb(main):004:2> CONST.succ! irb(main):005:2> end irb(main):006:1> end => :const_succ irb(main):007:0> const_succ => "11" irb(main):008:0> const_succ => "12" # 特異メソッド (クラスメソッド) で const_succ が利用可能 irb(main):009:0> class Cls1 irb(main):010:1> class << self irb(main):011:2> const_succ irb(main):012:2> end irb(main):013:1> end => "13" irb(main):014:0> Cls1.const_succ => "14"
定数に対する succ
メソッドの呼び出し例.
irb(main):001:0> CONST = '1' => "1" irb(main):002:0> CONST = '2' (irb):2: warning: already initialized constant CONST (irb):1: warning: previous definition of CONST was here => "2" irb(main):003:0> CONST.succ => "3" irb(main):004:0> CONST.succ => "3" irb(main):005:0> CONST.succ => "3" irb(main):006:0> CONST.succ! => "3" irb(main):007:0> CONST.succ! => "4"
通常, 定数への再代入はワーニングが出てしまう. succ
メソッドを呼び出すと, 最初に呼び出された際にはカウントアップ (3
になる) されるが, その後, 何度も succ
メソッドを呼び出してもカウントアップされない. 破壊的メソッド succ!
を呼び出すとカウントアップされる.
正規表現
以下のコードを実行するとどうなるか.
p "Nut rage incident"[/[J-P]\w+[^ ]/]
Nut と表示される
以下, irb による確認.
irb(main):001:0> p "Nut rage incident"[/[J-P]\w+[^ ]/] "Nut" => "Nut"
以下, 解説より抜粋.
- 正規表現の
[J-P]
は囲まれた文字の 1 つ 1 つにマッチする J-P
は大文字のJ
からP
の 1 文字にマッチする\w
は大文字, 小文字, 数字とアンダーバー(_
) にマッチする+
は直前の文字が, 1回以上の繰り返しにマッチする[^ ]
は空白以外にマッチする
ということで, 設問では Nut
という文字列がマッチする.
以下, よく使われる文字クラスには, 以下のような省略記法がある.
省略記法 | 文字クラス |
---|---|
\w |
単語構成文字 [a-zA-Z0-9_] |
\W |
非単語構成文字 [^a-zA-Z0-9_] |
\s |
空白文字 [ \t\r\n\f\v] |
\S |
非空白文字 [^ \t\r\n\f\v] |
\d |
10進数字 [0-9] |
\D |
非10進数字 [^0-9] |
\h |
16進数字 [0-9a-fA-F] |
\H |
非16進数字 [^0-9a-fA-F] |
フムフム.