Ruby在块内设置局部变量

时间:2013-07-17 20:54:46

标签: ruby scope

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

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

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

1 个答案:

答案 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