Movatterモバイル変換


[0]ホーム

URL:


rubyco(るびこ)の日記

この広告は、90日以上更新していないブログに表示しています。

局所変数の作り方

代入されると局所変数ができるのだとしたら、その場所の環境を使って代入文をevalすれば局所変数を別の箇所で作ることができるのではないかのテストです。
make_localvarで局所変数を作ろうと思ったのですが、以下の通り、結果は失敗でした。ri variableでさがしてみましたが、適当そうなメソッドは見つかりませんでした。

def make_localvar(sym, value, binding)  eval("#{sym} = #{value}", binding)enddef rubyco  a = 1  b = 2  make_localvar(:c, 3, binding())  d = 4  p [a, b, c, d]endrubyco      #=> undefined local variable or method `c' for main:Object (NameError)

疑問:make_localvar(sym, ...)でシンボルsymという名前の局所変数をmake_localvarの呼び出し側に作る方法はあるのでしょうか。
追記:id:sumimさん、ささださんからの情報で、以下ならOKとのこと。情報ありがとうございます。局所変数は作られていて、ただし与えたBindingオブジェクト上(?)で、ということと理解しました。

def make_localvar(sym, value, bnd)  eval("#{sym} = #{value}", bnd)enddef rubyco  a = 1  b = 2  make_localvar(:c, 3, binding)  d = 4  p [a, b, eval("c", binding), d]endrubyco      #=> [1, 2, 3, 4]

さらに追記:ささださんから「binding メソッドは binding を作るメソッド (となる予定) なので、上記例では不適切です」とのこと。情報ありがとうございます。とりあえずメモしておきます。

検索

引用をストックしました

引用するにはまずログインしてください

引用をストックできませんでした。再度お試しください

限定公開記事のため引用できません。

読者です読者をやめる読者になる読者になる

[8]ページ先頭

©2009-2025 Movatter.jp