質問

ということかを使用してい irb, 型 a = 5.表示されている定義 a そのタイピング a を返します NameError?

一部のコンテクスト:後にこういう仕事がしたい:

context = Proc.new{}.binding
context.eval 'a = 5'
context.eval 'undef a'  # though this doesn't work.
役に立ちましたか?

解決

があり remove_class_variable, remove_instance_variableremove_const 方法がありませんが相当地の変数.

他のヒント

あなたは変数が存在する範囲を減らすことによって、変数を解除宣言を避けることができます:

def scope 
  yield
end

scope do 
  b = 1234
end

b  # undefined local variable or method `b' for main:Object
IRBサブシェルを呼び出すことにより、ローカル変数の

あなたのことができ、常に「クリア」IRBのレジストリ。バッシュシェルはアンエクスポート環境変数に関してどのように動作するかを考えます。あなたが対話モードをmetionedので、このソリューションは、そのために働くべきです。

限り生産コードとして、私は、ソリューションの一部としてローカル変数を未定義のは嫌だ - キー付きハッシュはおそらくシナリオのそのタイプの方が良いでしょう。

ここで私の意味は次のとおりです。

$ irb
irb(main):001:0> a = "a"
=> "a"
irb(main):002:0> defined? a
=> "local-variable"
irb(main):003:0> irb # step into subshell with its own locals
irb#1(main):001:0> defined? a
=> nil
irb#1(main):002:0> a
NameError: undefined local variable or method `a' for main:Object
    from /Users/dean/.irbrc:108:in `method_missing'
    from (irb#1):2
irb#1(main):003:0> exit
=> #<IRB::Irb: @context=#<IRB::Context:0x1011b48b8>, @signal_status=:IN_EVAL, @scanner=#<RubyLex:0x1011b3df0>>
irb(main):004:0> a # now we're back and a exists again
=> "a"

現在、あなたは、グローバル変数、ローカル変数とクラス変数を削除するには、no平均を持っていません。あなたは、

けれども「remove_const」メソッドを使用して、定数を削除することができます

質問の精神では、あなたが他のローカル変数が同じスコープにロックされていると大丈夫ですと仮定すると、スコープに変数を制限することができます。これは、クラスで何かを定義していると、ローカル変数は、クラス宣言の周りに滞在したくない場合は特に便利です。

これを行うには、私が考えることができる唯一の方法はそうのようなInteger#timesまたはArray#eachである。

1.times do |a|
  a = 5
  # code…
end

[5].each do |a|
  # code…
end

このほかにブロックに制限するための、おそらく他、でもクリーンな方法があります。これらは私がしたいと私は、誰かがこれを行うために使用するクリーナーの方法を持っているかどうかを確認してみたいほどきれいではありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top