0

我第一次有这个代码,但它不起作用:

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

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

configure只是为Vimrunner服务器进行设置的一种方法。该start_vim方法仅描述了应该执行的内容 start vim。然而这并不重要。

实际上正确的是:

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

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

我不太明白这一点。在第一种情况下,我实际上为VIM常量分配了一个 Proc,正如我通过 发现的那样irb,而在第二种情况下,VIM常量被正确分配。

看来,我通过使用这些块分配了 VIM 常量(位于全局命名空间中),这就是我的理解失败的地方:

我怎样才能在一个块中的一个块中分配一个变量,并让该分配被扔回全局命名空间?

那是如何工作的?例如,我尝试了以下代码:

def foo
    yield
end

foo do
    a = 'Hello World!'
    a
end

puts a

这会告诉我一个错误。如何将 ruby​​ 块中的变量放入调用者的范围?

4

1 回答 1

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
于 2016-07-13T22:39:08.293 回答