cloudpack の ヤマグチです。
ふと思ったのですが、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"]
素直にブロックを書きましょう。