ruby - 为什么全局变量在 .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 代码有什么区别?
解决方案
我怀疑您的环境中有不同的 log() 定义。将您的例程名称更改为其他名称(例如“mylog”)将检验这一假设。
推荐阅读
- c - 使用 gcc target_clones 函数多版本控制静态链接存档时如何修复未定义的引用链接器错误
- angular - Angular 属性指令获取对其他同级属性引用的引用
- php - 使用php以excel xml格式导出期间增加行限制
- typescript - 如何忽略“类型实例化过深并且可能无限。ts(2589)”打字稿错误?
- html - 如何使 flex 子元素像内联元素一样换行到下一行
- android - 是否应授权测试人员进行内部应用共享以使用该链接安装应用?
- scala - Spark 2.2 的 SBT 编译失败
- java - 如何为ehcache初始化对象列表<>?
- python - 如何解决熊猫中多列的断言错误
- size - ValueError: 目标尺寸 (torch.Size([16])) 必须与输入尺寸 (torch.Size([16, 1])) 相同