我使用一个定义了自己的开关的库,然后传递OptionParser
对象让我添加地雷。
然而,它添加了我想删除的开关,因为它们会让我的用户感到困惑。
从本质上讲,我想撤消这一点(不需要删除代码行,因为它是第三方):
opts.on("-p", "--port PORT", Integer, "Specify port", "(default: #{options[:port]})") do |v|
options[:port] = v
end
我尝试查看类的代码,但没有找到任何remove
机制。
所以我想在通过元编程进行黑客攻击之前我会问。
编辑 - 元编程方式(vey hacky ..):
class OptionParser
attr_accessor :stack
end
...
opts.stack[2].long.reject! { |k| k == "port" }
opts.stack[2].short.reject! { |k| k == "p" }
...
答案 0 :(得分:1)
虽然仍然不是最优雅的解决方案,但您可以避免使用instance_variable_get方法重新打开该类。在这种情况下,您的代码将变为:
opts.instace_variable_get(:@stack)[2].long.reject! { |k| k == "port" }
opts.instace_variable_get(:@stack)[2].short.reject! { |k| k == "p" }
答案 1 :(得分:1)
我也想为同样的问题找到解决方案并为它制作一个宝石:https://github.com/KitaitiMakoto/optparse-off