【问题标题】:Access Thor Option Hash访问 Thor 选项哈希
【发布时间】:2012-02-16 18:58:04
【问题描述】:

我想将一个值合并到Thor option hash

如果我只使用合并我会得到一个错误,HashWithIndifferentAccess

我已阅读文档,但我很难理解如何使其工作。我想我希望这个问题能帮助我找到关于如何将值合并到这种哈希中的问题的答案,并了解如何阅读文档。

p options.inspect 
#=> "{\"ruby\"=>\"/Users/work/.rbenv/versions/1.9.2-p290/bin/ruby\"}"
p options.merge!(:a => true)
#=> hash_with_indifferent_access.rb:26:in `[]=': can't modify frozen hash (RuntimeError)

【问题讨论】:

    标签: ruby thor


    【解决方案1】:

    哈希被冻结:

    "防止对 obj 的进一步修改。将引发 RuntimeError 如果尝试修改。没有办法解冻冻结的 对象。”

    您可以将options 复制到一个新的哈希(将被解冻)并修改它。

    new_options = options.dup
    options = new_options
    options.merge!(:a => "this will work now")
    

    或者如果你想让它更简洁:

    options=options.dup
    options.merge!(:a => "this will work now")
    

    Thor 库默认返回一个冻结的哈希,所以另一个选择是修改库以返回未冻结的哈希,但我认为第一个解决方案已经足够了。

    下面是 Thor 解析函数的源代码链接,您会注意到它在实际返回之前冻结了“assigns”返回哈希(转到页面底部,在 (Object) parse(args) 下,单击“查看源码'。冻结在源码sn-p的第83行。)

    http://rubydoc.info/github/wycats/thor/master/Thor/Options

    【讨论】:

    • 是的,谢谢!使用文档中的方法没有办法做同样的事情吗? (上面的链接)
    猜你喜欢
    • 2014-12-14
    • 2014-05-06
    • 1970-01-01
    • 2022-11-22
    • 2013-06-06
    • 1970-01-01
    • 2012-09-06
    • 1970-01-01
    • 2013-03-22
    相关资源
    最近更新 更多