抑制 Ruby 警告
标签 Ruby在 irb 命令行里输入
#!bash
>> X = 1
=> 1
>> X = 2
(irb):28: warning: already initialized constant X
=> 2
你会看到上面那行警告, 已经初始化过常量 X, ruby 是在提醒你常量是不应该被改变的, 不过 ruby 只是在抱怨一句罢了, 实际上 X 的值已经由 1 变成 2 了.
警告是对的, 常量的再次赋值有违原则. 但是人总会碰到情非得已的时候.
ruby 论坛上有篇贴子也提到了这一问题, 沙发搞笑的说忽略事情最简单的方式就是闭上眼睛. 不过五楼是正经人, 给出了解决问题的思路. 顺着思路就想到了这个方法.
ruby 接受 -W 作为参数.
#!bash
ruby -h
-W[level] set warning level; 0=silence, 1=medium, 2=verbose (default)
运行时对应的是全局变量 $-v
- nil -W0
- false -W1
- true -W2
这样事情就变得简单了.
#!ruby
def suppress_warning &block
old_v = $-v
$-v = nil
yield
ensure
$-v = old_v
end
试试效果
#!bash
>> X = 1
=> 1
>> suppress_warning { X = 2 }
=> 2
嗯, 感觉不错, 你也是不清理不舒服斯基吗?