本を読む

読書やコンピュータなどに関するメモ

Rubyで“.”演算子を置き換えてみる

 Ruby上で自分で演算子を変更できるようにして、“.”のかわりに“->”を使えるようにするとどうなるかと思いました。そのために、Perlにあるソースフィルタの簡易版みたいな機能を試しに追加してみます。

注意:これは実用性のない単なるジョーク改造です。

 Ruby 1.9.2 p136のruby.cにこんな(↓)パッチを当てビルドしてみます。

 そのうえでこんな(↓)filter.rbを作ってカレントディレクトリに置きます。フィルタをKernel.source_filterとして定義しています。Kernel.source_filterは、ソースをStringとして受け取って、加工したStringとして返します。

def Kernel.source_filter(source)
  source.gsub(/->/, '.')
end

 で、こんな(↓)hoge.rbを書いてカレントディレクトリに置いてみます。

[3, 5, 7]->map {|i| i + 2 }->each do |i|
  puts i
end

 filter.rbを-rで読み込んだうえで、hoge.rbを実行してみます。

$ ruby -I. -rfilter hoge.rb
5
7
9

 …ルー語的なキモさ。

 続いて、カッコの開きと閉じを逆にしてみます。まずfilter.2.rbを書きます。

def Kernel.source_filter (source)
  source.tr('()[]{}', ')(][}{')
end

 それ用にfuga.rbを書きます。

puts ]1, 2, 3[.inject)0(}|r, i| r + i{

 実行してみます。

$ ruby -I. -rfilter2 fuga.rb
6

 …ないわー。

コメント

コメントの投稿

管理者にだけ表示を許可する

トラックバック

http://emasaka.blog65.fc2.com/tb.php/868-2b13cad6

 | HOME | 

Categories

Recent Entries

Recent Comments

Recent Trackbacks

Appendix

emasaka

emasaka

フリーター。
連絡先はこのへん

Monthly


FC2Ad