【问题标题】:Ruby and Chef difference in hashesRuby 和 Chef 哈希值的区别
【发布时间】:2016-09-22 12:07:45
【问题描述】:

我已经用 ruby​​ 编程了一段时间,听说使用符号来访问散列中的值是比使用字符串“更好的做法”,例如

default[:key] = value 
  over 
default['key'] = value

我一直在做一个厨师项目,并注意到厨师食谱使用第二种方法来访问哈希值(通过字符串)。通常通过符号替代访问不起作用!

所以我想我的问题是两个部分,我应该停止使用符号并在任何地方使用字符串访问器吗?为什么符号的使用不起作用?

【问题讨论】:

  • 参见 this comment 关于美食评论规则。无论如何,Chef Mashes 访问器都会将符号转换为字符串,因此请使用字符串。符号不起作用通常是在有运算符时(通常是-)。
  • 符号,在普通的旧 Ruby 中,类似于 C 中的字符串常量。当你使用它们时,它们实际上只存在一次。如果你有很多它们,它可以帮助节省内存。但是,当使用字符串时,每次声明它们时它们总是不可变的实例。如果将它们用作常量,建议使用freeze 字符串。要向 Ruby 解释器声明带有空格或其他保留标记的符号,请像这样声明它们 :"dashed-symbol"
  • 谢谢!这确实揭示了为什么建议在字符串上使用符号的原因。

标签: ruby hash chef-infra


【解决方案1】:

T.L;D.R.尽管仍在使用中,但不鼓励通过符号访问属性,而是支持字符串。

在 foodcritic (linter) issue here 中引用 Chef 的 lamont granquist@

Mashes 的 Chef 实现在内部将所有符号转换为 字符串

官方recommendation in docs是使用Strings。

要完成厨师属性的概述,您还可以将它们作为实例方法访问,即node.key.subkey 但此方法已弃用,将在短期至中期删除。

【讨论】:

  • 符号键没有被弃用,也永远不会被删除。这是待删除的方法样式访问。
  • 我感觉我忘记了一些东西 ;) 感谢@coderanger 的提醒。希望编辑还是我应该这样做?
  • 去吧,我现在在手机上:)
  • @coderanger 不好,让孩子上床睡觉,最小的完成,最大的将结束她的动画,做作业并睡觉;)同时编辑
  • @coderanger 完成。希望我现在在所有方面都是正确的。如果您觉得缺少信息,请随时编辑:)
猜你喜欢
  • 2012-09-12
  • 1970-01-01
  • 2015-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-20
  • 1970-01-01
相关资源
最近更新 更多