【发布时间】:2019-05-12 07:52:42
【问题描述】:
请您帮助我理解哈希背后的概念,尤其是当我们使用符号时。
:name 是一个符号吧?
我们可以使用符号作为散列权的键吗?
:name 和name: 例如:这是两种语法,但它描述了一个符号,对吗?
例如,当我们有这个时:
Geocode.configure(
units: :km
)
这里的units 引用了configure 函数中称为units 的指定参数,对吗? :km 是我们要通过变量单元发送的符号还是我错了?
最后一个例子:
validates :home_type, presence: true
这里我们尝试向 validates 函数发送符号 home_type 对吗?
第二个参数被命名为“存在”,我们想通过这个变量发送布尔值 true 吗?
很抱歉,如果您不理解我的问题,请随时问我。
我对这些语法有很多理解。
非常感谢!
【问题讨论】:
-
"units 引用了一个名为units 的指定参数" – 你无法真正分辨这是关键字参数还是散列。 Ruby 2.x 在它们之间透明地转换,所以
foo(a: 1)和foo({a: 1})实际上是相同的。 Ruby 3.x 将有“真正的”关键字参数。 -
下面的答案解释了符号语法糖。对于何时使用字符串作为键和何时使用符号作为键之间的区别,我建议查看When to use symbols instead of strings in Ruby?。
标签: ruby-on-rails ruby hash symbols