2

我有一个变量,我设置了一个默认值,然后我执行了一个过程。问题是,我无法访问块内的变量,因为块有自己的变量范围并且无法访问外部。这是一个片段:

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

是否可以允许块写入该局部变量?也许使用参考?

4

1 回答 1

2

在您的程序中,外部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
于 2013-07-17T21:11:48.203 回答