变量赋值发生在块中的块中
Variable assignment takes place in a block in a block
我第一次使用这段代码,但它不起作用:
VIM = Vimrunner::RSpec.configure do |config|
config.reuse_server = true
config.start_vim do
vim = Vimrunner.start
vim
end
end
configure
只是一种为Vimrunner服务器进行设置的方法。 start_vim
方法只是描述了应该执行什么来启动 vim
。不过这并不重要。
实际正确的是:
Vimrunner::RSpec.configure do |config|
config.reuse_server = true
config.start_vim do
VIM = Vimrunner.start
VIM
end
end
这个我不太明白。在第一种情况下,我实际上将 Proc 分配给 VIM
常量,正如我通过 irb
发现的那样,而在第二种情况下,VIM
常量被正确分配。
看来,我通过使用这些块分配了 VIM 常量(位于全局名称空间中),这就是我的理解失败的地方:
我怎样才能在一个块中的一个块中分配一个变量,并让该分配投掷回到全局命名空间?
How does that work?例如我试过这段代码:
def foo
yield
end
foo do
a = 'Hello World!'
a
end
puts a
这会向我显示错误。如何将 ruby 块中的变量放入调用者的范围?
如果你想在外部访问它,你可以使用实例变量吗?即 @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
我第一次使用这段代码,但它不起作用:
VIM = Vimrunner::RSpec.configure do |config|
config.reuse_server = true
config.start_vim do
vim = Vimrunner.start
vim
end
end
configure
只是一种为Vimrunner服务器进行设置的方法。 start_vim
方法只是描述了应该执行什么来启动 vim
。不过这并不重要。
实际正确的是:
Vimrunner::RSpec.configure do |config|
config.reuse_server = true
config.start_vim do
VIM = Vimrunner.start
VIM
end
end
这个我不太明白。在第一种情况下,我实际上将 Proc 分配给 VIM
常量,正如我通过 irb
发现的那样,而在第二种情况下,VIM
常量被正确分配。
看来,我通过使用这些块分配了 VIM 常量(位于全局名称空间中),这就是我的理解失败的地方:
我怎样才能在一个块中的一个块中分配一个变量,并让该分配投掷回到全局命名空间?
How does that work?例如我试过这段代码:
def foo
yield
end
foo do
a = 'Hello World!'
a
end
puts a
这会向我显示错误。如何将 ruby 块中的变量放入调用者的范围?
如果你想在外部访问它,你可以使用实例变量吗?即 @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