用于使用命令行选项的ruby习语
我试图通过移植一个中型(非OO)perl程序来获取
ruby.我个人的习惯之一是设置这样的选项:
use Getopt::Std; our $opt_v; # be verbose getopts('v'); # and later ... $opt_v && print "something interestingn"; 在perl中,我有点咬牙切齿,让$opt_v(有效地)成为全球性的. 在ruby中,或多或少精确的等价物 require 'optparse' opts.on("-v","--[no-]verbose",TrueClass,"Run verbosely") { |$opt_verbose| } opts.parse! end 其中$opt_verbose是类可以访问的全局.让课程知道这样的全球旗帜似乎……呃……错了. OO惯用的方法是什么? >让主程序处理所有与选项相关的东西,并让类只返回它决定如何处理的东西? 更新:感谢建议optparse的答案,但我应该更清楚的是,它不是如何处理我正在询问的命令行选项,而是更多关于有效设置全局程序状态的命令行选项与类之间的关系理想情况下应该独立于那种事情. 解决方法
前段时间我遇到了
this blog post(由Todd Werth编写),它为Ruby中的命令行脚本提供了一个相当冗长的框架.他的骨架使用混合方法,其中应用程序代码封装在实例化的应用程序类中,然后通过在应用程序对象上调用“run”方法来执行.这允许将选项存储在类范围的实例变量中,以便应用程序对象中的所有方法都可以访问它们,而不会将它们暴露给可能在脚本中使用的任何其他对象.
我倾向于使用这种技术,其中选项包含在一个对象中,并在方法调用上使用attr_writers或option参数将相关选项传递给任何其他对象.这样,外部类中包含的任何代码都可以与选项本身隔离 – 如果使用thingy.verbose = true attr_writer设置选项,则无需担心在thingy类中主例程中变量的命名.或者thingy.process(true)调用. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |