[英]Ruby command line parsing
class Test
options = Trollop::options do
opt :mode, "Select script mode", :default => 0
opt :net, "Internal IP range", :type => :string
end
@options = options
def test
pp @options
end
end
为什么在我调用test()
时@options
返回nil
?
我还尝试过在首次调用Trollop时将@options
设置为实例。 我需要能够将Trollop返回的选项哈希传递到类中的不同方法中。
如果您真的想使用类实例变量进行选项存储,则可以这样做:
class Test
@options = Trollop::options ...
class << self
attr_accessor :options
end
def test
pp Test.options
# or self.class.options
end
end
# And this will work too..
pp Test.options
否则,您可能想要使用其他变量指出的类变量@@options
或常量。
您在这里遇到的是一个范围界定问题。 类上下文中的@options
是类的实例变量。 在test
,您可以在当前实例中访问实例变量@options
。 尝试具有词法作用域的常量,也称为OPTIONS
。 也许其他人知道更清洁的解决方案。
正如Tass指出的那样,将@options
更改为OPTIONS
是一种方法。
您也可以使用@@options;
无论哪种情况,它都是一个类变量。
您将添加一个类实例变量,但是当您在方法中引用它时,您将引用看起来像实例变量的对象。
首先,您可能想使用类变量而不是类实例变量。 这里有一些关于区别的信息 。
class Test
@@options = Trollop::options do
opt :mode, "Select script mode", :default => 0
opt :net, "Internal IP range", :type => :string
end
def test
pp @@options
end
end
Test.test
另一个选择是在初始化测试对象时实例化类变量,如下所示:
class Test
def initialize
@options = Trollop::options do
opt :mode, "Select script mode", :default => 0
opt :net, "Internal IP range", :type => :string
end
end
def test
pp @options
end
end
t = Test.new
t.test
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.