首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ruby命令行解析

Ruby命令行解析
EN

Stack Overflow用户
提问于 2013-01-30 04:22:33
回答 4查看 263关注 0票数 0
代码语言:javascript
复制
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返回的选项散列传递到类中的不同方法中。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-01-30 04:43:39

正如Tass所指出的,将@options更改为OPTIONS是一种方法。

您也可以使用@@options;,它是任一上下文中的类变量。

票数 0
EN

Stack Overflow用户

发布于 2013-01-30 04:47:05

如果你真的想使用一个类实例变量来存储选项,那么这是可行的:

代码语言:javascript
复制
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或常量,就像前面指出的那样。

票数 1
EN

Stack Overflow用户

发布于 2013-01-30 04:34:44

这里有一个作用域问题。类上下文中的@options是类的实例变量。在test中,您可以访问当前实例中的实例变量@options。尝试常量,也就是OPTIONS,它有词法作用域。也许其他人知道一个更干净的解决方案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14591539

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档