guessメソッド
欲しいメソッドを推測するguessというメソッドを作ってみた。
使い方
元の値.guess(目的の値,引数…)
irb> require 'guess' => true irb> 1.guess 2 ← 1から2になるメソッドを探す => ["next", "succ"] irb> [1,2,3].guess 3 ← [1,2,3]から3を返すメソッドを探す => ["nitems", "size", "last", "max", "pop", "length"] irb> 1.guess 2 ,1 ← 1に引数1を与えると2になるメソッドを探す => ["<<", "+"]
guess.rb
require 'stringio' class Object def guess(ans,*arg) $stdout, v, $VERBOSE = StringIO.new, $VERBOSE, nil r=methods.select{|m| (dup rescue self).send(m,*arg)==ans rescue false } $stdout, $VERBOSE = STDOUT, v r end end
おぼえがき
表示系のメソッドがあるので$stdoutはリダイレクトしないと表示が崩れる。
dupしておかないと破壊的メソッドを使ってしまった後の結果が変わってしまう。
数値などの immutable なオブジェクトは close や dup が禁止されています。
http://kansai.anesth.or.jp/gijutu/ruby/man-z1/refm0047.html