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设置为instance。我需要能够将从Trollop返回的选项散列传递到类中的不同方法中。
发布于 2013-01-30 04:43:39
正如Tass所指出的,将@options更改为OPTIONS是一种方法。
您也可以使用@@options;,它是任一上下文中的类变量。
发布于 2013-01-30 04:47:05
如果你真的想使用一个类实例变量来存储选项,那么这是可行的:
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或常量,就像前面指出的那样。
发布于 2013-01-30 04:34:44
这里有一个作用域问题。类上下文中的@options是类的实例变量。在test中,您可以访问当前实例中的实例变量@options。尝试常量,也就是OPTIONS,它有词法作用域。也许其他人知道一个更干净的解决方案。
https://stackoverflow.com/questions/14591539
复制相似问题