我正在尝试通过移植一个中型(非 OO)perl 程序来学习 ruby。我的个人习惯之一是设置如下选项:
use Getopt::Std;
our $opt_v; # be verbose
getopts('v');
# and later ...
$opt_v && print "something interesting\n";
在 perl 中,我有点咬紧牙关,让 $opt_v (有效地)成为一个全局变量。
在红宝石中,或多或少精确的等价物是
require 'optparse'
opts.on("-v", "--[no-]verbose", TrueClass, "Run verbosely") {
|$opt_verbose|
}
opts.parse!
end
其中 $opt_verbose 是类可以访问的全局变量。让班级知道这样的全局标志似乎......呃......错误。这样做的OO惯用方式是什么?
- 让主程序处理所有与选项相关的东西,让类只返回它决定如何处理的东西?
- 类是否实现了可选行为(例如,知道如何变得冗长)并通过 attr_writer 之类的东西设置模式?
更新:感谢建议 optparse 的答案,但我应该更清楚的是,这不是如何处理我要询问的命令行选项,而是更有效地设置全局程序状态的命令行选项和类之间的关系理想情况下应该独立于那种事情。