我正在尝试通过移植一个中等规模的(非面向对象)Perl程序来学习Ruby。我的个人惯用语之一是像这样设置选项:
use Getopt::Std;
our $opt_v; # be verbose
getopts('v');
# and later ...
$opt_v && print "something interesting\n";
在perl中,我会咬紧牙关让$opt_v成为(实质上的)全局变量。
在ruby中,更或多或少准确的等效物是:
require 'optparse'
opts.on("-v", "--[no-]verbose", TrueClass, "Run verbosely") {
|$opt_verbose|
}
opts.parse!
end
$opt_verbose是一个全局变量,类可以访问。让类知道这样的全局标志似乎不太对。那么,有没有面向对象的方式来解决这个问题呢?
- 让主程序处理所有与选项相关的内容,并让类只返回它所决定如何处理的内容?
- 让类实现可选行为(例如,知道如何详细说明),并通过attr_writer之类的方式设置模式?