首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >访问Thor选项哈希

访问Thor选项哈希
EN

Stack Overflow用户
提问于 2012-02-17 02:58:05
回答 1查看 1.4K关注 0票数 3

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

如果我只是使用merge,我会得到一个错误,HashWithIndifferentAccess

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

代码语言:javascript
复制
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)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-17 03:38:42

哈希被冻结:

“阻止对obj的进一步修改。如果尝试修改,则会引发RuntimeError。无法解冻冻结的对象。”

您可以将options复制到新的散列(将被解冻),然后对其进行修改。

代码语言:javascript
复制
new_options = options.dup
options = new_options
options.merge!(:a => "this will work now")

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

代码语言:javascript
复制
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

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

https://stackoverflow.com/questions/9317352

复制
相关文章

相似问题

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