Ruby在块内设置本地变量

3

我有一个变量,我设置了默认值,然后对其执行了一个过程。问题在于,在块内部我无法访问该变量,因为该块具有自己的变量作用域并且无法访问外部。以下是代码片段:

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

是否可以允许该块写入该本地变量?也许可以使用引用?


你可以在循环中使用p output,error吗?似乎if条件从未为真。 - undefined
@tolgap:p x 相当于 puts x.inspect,所以你不应该写成 p value.inspect,因为它和 puts x.inspect.inspect 是一样的,会造成很糟糕的结果。 - undefined
1个回答

4
在您的程序中,块修改了外部的value变量。通常将nil分配给这种外部变量,但您目前的方法也可以正常工作。
尝试在代码块内修改值为其他值,例如这样,您会发现变量已被更改。我猜测output.empty?返回true。
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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接