我想将一个值合并到一个Thor option hash中。
如果我只是使用merge,我会得到一个错误,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)发布于 2012-02-17 03:38:42
哈希被冻结:
“阻止对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)下,单击”View source“。冻结在源代码段的第83行。)
http://rubydoc.info/github/wycats/thor/master/Thor/Options
https://stackoverflow.com/questions/9317352
复制相似问题