я первый имел этот код, но он не работает:Присваивание происходит в блоке, в блоке
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 в область вызова?
Фактически нет, это не работает. Он должен 'config.start_vim {vim = Vimrunner.start; vim} '. Вот что я так смущаю. – hgiesel
Это кажется странным, поскольку это почти то же самое. –
@hgiesel, не могли бы вы попробовать обновленный код (последний) –