呼び出し元のローカル変数を変更する
Evanから資料が上がってこないので、Rubiniusで遊んでみる。
次のコードは、あるメソッドの中から呼び出し元のローカル変数を変更するサンプル。
もちろんRubinius限定。
def f() var = 1 g(var) # var が 2 に変更される puts "f(): var=#{var}" #=> "f(): var=2" end def g(x) ## 呼び出し元のローカル変数の値を操作する context = MethodContext.current.sender v = context.locals[0] # context.locals[:a] とできて欲しい context.locals[0] = v + 1 end f()
こんなことができてうれしいかというと、なんともいえない。
ただ、これを喜ぶ人は優秀なハッカーになれる資質がある。
喜ばない人は、RubyよりJavaやC#が向いていると思う。