我有一个变量,我设置了一个默认值,然后我执行一个过程。问题是,我无法访问块内的变量,因为块具有自己的变量范围,无法访问外部。这是一个片段:
value = ""
cmd_errors = Array.new
# Call the command line
status = POpen4.popen4(cmd) do |stdout, stderr|
output = stdout.read
error = stderr.read
if (!output.empty?)
value = JSON.parse(output) #This just creates a block scoped variable called 'value' and my local variable is still empty
else
cmd_errors << error
end
end
是否可以允许块写入该局部变量?也许使用参考文献?
答案 0 :(得分:0)
在您的程序中,块正在修改外部value
变量 。通常会将nil
分配给此类外部变量,但您所拥有的内容将正常工作。
尝试将值修改为块内的其他内容,就像这样,您将看到变量正在被更改。我的猜测是output.empty?
即将成真。
value = nil
cmd_errors = Array.new
status = POpen4.popen4(cmd) do |stdout, stderr|
output = stdout.read
error = stderr.read
value = 'within block'
if (!output.empty?)
value = JSON.parse(output)
else
cmd_errors << error
end
end
p value