【发布时间】: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