为什么全局变量在.rb文件中不起作用但在irb中起作用?

时间:2018-05-25 03:21:02

标签: ruby

我试图根据块的深度添加缩进。我使用全局变量来记录块的深度。

$depth = 0

def log(des, &block)
  indentation = "  " * $depth
  $depth += 1
  puts "#{indentation}Begginning the #{des} block"
  puts "#{indentation}Finished #{des} and returned: #{block.call}"
  $depth -= 1
end


log "outer block" do
  log "second level block" do
    log "third level block" do
      "I am number 3"
    end
    "I am number 2"
  end
  "I am out most!"
end

在终端我尝试了几次ruby file_name.rb,它没有显示缩进,它甚至不会puts全局变量。之后我将代码复制到irb并且它有效。

为什么会这样?

在这两个地方之间运行ruby代码有什么区别?

1 个答案:

答案 0 :(得分:1)

我怀疑你的环境中有不同的log()定义。将例程的名称更改为其他名称(例如' mylog')将测试此假设。