cloudpack の ヤマグチです。

図らずも5年前の車輪を再発明してしまった前回でした。

ふと思ったのですが、Symbol#[]はどういう実装だったかなと。

class Symbol

self.to_s[nth] と同じです。

self.to_s[nth, len] と同じです。

self.to_s[substr] と同じです。

self.to_s[regexp, nth] と同じです。

self.to_s[range] と同じです。

うーむ。Stringと同じなんですね……。暴挙と承知の上でこれをオーバーライドするとしたらこんな感じでしょうか。

class Symbol
def [] *args
Proc.new {|object| object.send self, *args}
end
end

%w(vanilla caramel matcha).map &:+[" icecream"]
# => ["vanilla icecream", "caramel icecream", "matcha icecream"]

素直にブロックを書きましょう。

こちらの記事はなかの人(ヤマグチ)監修のもと掲載しています。
元記事は、こちら