>>311
ありがとうございます。
スコープの問題なんですね。

forを使った場合は
readメソッドの定義内では、@input.send(mid,*args)
getsメソッドの定義内では、@input.send(mid,*args)
getcメソッドの定義内では、@input.send(mid,*args)
で、結局 mid は:getc だということでしょうか。

blockを使った場合は
readメソッドの定義内では、@input.send(:read,*args)
getsメソッドの定義内では、@input.send(:getc,*args)
getcメソッドの定義内では、@input.send(:gets,*args)

という風になってるようなんですが、
スコープというより、定義するタイミングの問題でもあるんでしょうか。

ちょっと、理解できなかったですorz