首页 > 解决方案 > 为什么全局变量在 .rb 文件中不起作用但在 irb 中起作用?

问题描述

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

$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​​ 代码有什么区别?

标签: ruby

解决方案


我怀疑您的环境中有不同的 log() 定义。将您的例程名称更改为其他名称(例如“mylog”)将检验这一假设。


推荐阅读