Symbol#pa

[123, 456, 789].map {|i| i.to_s }
[123, 456, 789].map(&:to_s)

Symbol#to_procを初めて見た時は喜んでた.確かにこれは素晴らしいけど,じゃあto_sに引数を渡したい時は…?

[123, 456, 789].map {|i| i.to_s(16) }

&:to_sで書いてて,後から↑みたいに直さないといけなくなったら(精神的に)悲惨だ.
そこで,部分適用するメソッドSymbol#paを作ってみた.

[123, 456, 789].map(&:to_s.pa(16))
# => ["7b", "1c8", "315"]

.pa(16)を足すだけでよくなった.
さらに,paを[]にaliasすると,

[123, 456, 789].map(&:to_s[16])
# => ["7b", "1c8", "315"]

これはきもい素晴らしい.


Proc#paもついでに作ったけど,やっぱりpaがあるとcutも欲しくなるなぁ.
ただ,Schemeと違って予約語が作れないから,いろいろ面倒臭い.<>の代わりに適当な定数を用意するとかすればできるけど,美しくない気がする.