2016-07-13 6 views
0

のブロックで行われますが、それは働いていませんでした。変数の割り当ては、私が最初にこのコードを持っていたブロック

configure
VIM = Vimrunner::RSpec.configure do |config| 
    config.reuse_server = true 

    config.start_vim do 
    vim = Vimrunner.start 
    vim 
    end 
end 

がちょうどVimrunnerサーバーの設定を行う方法です。 start_vimメソッドは、vimを開始するために実行されるべきものを示しています。しかし、それは本当に問題ではありません。実際には正しかった何

されました:

Vimrunner::RSpec.configure do |config| 
    config.reuse_server = true 

    config.start_vim do 
    VIM = Vimrunner.start 
    VIM 
    end 
end 

私はかなりこのことを理解していません。最初のケースでは、irbで見つかったように、実際にVIM定数にProcを割り当てましたが、2番目のケースでは、VIM定数が正しく割り当てられました。

は、だから、私はこれらのブロックを使用して(グローバル名前空間にある)VIM定数を割り当てられた、ようで、私の理解が私を失敗したところ、それはだ:私はブロック内の変数を割り当てることができますどのように

ブロック内で割り当てをにするグローバルネームスペースに戻る

How does that work?たとえば、私はこのコードを試しました:

def foo 
    yield 
end 

foo do 
    a = 'Hello World!' 
    a 
end 

puts a 

私にはエラーが表示されます。 Rubyブロック内の変数を呼び出し元のスコープに入れるにはどうすればよいですか?

答えて

1

外部にアクセスしたい場合はインスタンス変数を使用できますか?すなわち@a = 'Hello World!'とし、puts @aを使用します。ローカル変数はあなた自身のブロックに結びついているので、外部で呼び出すことはできません。

私はあなたのユースケースがあり、正確にわからないんだけど、しかし、あなたは

def foo 
    yield 
end 

foo { 'Hello World!' } 

またはあなたの最初の場合には代わりにこれを使用することができるはずです(それは構成設定なので、それならば、私はわからないんだけど

Vimrunner::RSpec.configure do |config| 
    config.reuse_server = true 
    config.start_vim { Vimrunner.start } 
    config 
end 
+0

実際には、それは動作しません。これは 'config.start_vim {vim = Vimrunner.start; vim} 'を実行します。それは私がそれについてそれほど混乱しているのを見つけるものです。 – hgiesel

+0

それはほとんど同じことであるので、それは奇妙に思えます。 –

+0

@hgiesel、更新されたコード(最後のもの)を試すことができます –

関連する問題