Method Finder for ruby

http://shinh.skr.jp/koneta/mf.rb

id:sumim さんのところの記述 (http://d.hatena.ne.jp/sumim/20050822/p1) から Method Finder というものを知ったため、 ruby 版を書いてみました。既にありそうですが。

> ruby mf.rb
usage: mf.rb expected receiver [arg1 [arg2 ...] ]

引数順序変えて第一引数が結果の値、第二がレシーバ、第三以降が引数になってます。

> ruby mf.rb 8 2 3
Fixnum#**

階乗のメソッドを探してみました。

> ruby mf.rb '"b"' '"a"'
String#succ!
String#next
String#next!
String#succ

無引数の例。 '"b"' になっているのはシングルクォートは zsh のため。

> ruby mf.rb '[1,2,3,4]' '[1,2]' '[3,4]'
Array#+
Array#|
Array#concat

eval してるので配列とかもオッケー。

> ruby mf.rb '"bc"' '"abcdef"' 1 2
String#slice!
String#slice
String#[]

複数引数の例。

mf.rb を複数回呼び出しに対応してみた

さっきの mf.rb では sumim さんの元の問題のような、二回メソッド呼び出しが発生するケースはどうしようもないわけで…

> ruby mf2.rb -l 2 '"ABC"' '"aB"' '"c"'
"aB".<<("c").upcase()
"aB".<<("c").upcase!()
"aB".+("c").upcase()
"aB".+("c").upcase!()
"aB".concat("c").upcase()
"aB".concat("c").upcase!()

メソッドを呼び出す回数の最大数を -l 数字 で指定できるようにしてみました。

http://shinh.skr.jp/koneta/mf2.rb

ruby には <=> があって sign が無いので元の問題の解決にはこれは使えませんが…

なにかあれば下記メールアドレスへ。
shinichiro.hamaji _at_ gmail.com
shinichiro.h