17. 純粋にアルファベットだけで Ruby
第二段階: アルファベットだけで数字を作る(1)
• caller # 3 を作るコード
– スタックトレースを Array def f1; caller; end
として返すメソッド
• [“t.rb:2:in `f2'",
def f2; f1; end
• "t.rb:3:in `f3'", def f3; f2; end
• "t.rb:5:in `<main>‘”]
– メソッド大量でかっこ悪い
f3.size
• for 文
– ary.each {|i|……}
# . なしでメソッドを呼ぶ
• の構文糖
• Rubyでは使われない class Array
構文として有名 alias each size
– eachをsizeのエイリアス end
にすると、for文でsize
が呼べる p for i in f3 do end
17
18. 純粋にアルファベットだけで Ruby
第二段階: アルファベットだけで数字を作る(2)
• 長さ n の文字列を作る # 4 を作るコード
“¥4”を作るコード
class String
concat begin
– concat size:長さを+1
def inspect
dup
– concat self:長さを×2 concat size
ensure
– O(log(n)) で表現できる concat self
replace ""
• コード文字列を生成する部分と concat self
concat size
size
concat self
衝突する
end
concat self
– begin A ensure B end で end
concat begin
回避 size
• A を評価して B を評価して ensure
A の評価結果を返す
replace ""
end
end
18