18

我正在努力理解 :symbol 和 text: 之间关于冒号位置的区别。我的理解是,当我们使用 :symbol 时,我们指的是这个对象以及它包含的任何内容,其中 text: 用于为文本赋值,就像我们为变量一样。这是正确的还是有人可以详细说明用法。谢谢你。

4

2 回答 2

18

:whatever是一个符号,你说得对。

当您使用哈希时,这是您在 1.8x ruby​​ 中定义它的方式:

{:key => value, :another_key => another_value}

这被称为 hashrocket 语法。在 ruby​​ 1.9x 中,这变为:

{key: value, another_key: another_value}

向后兼容性仍然会加载 hashrocket 语法......但是,在 1.9 中,'key:' 是一个符号

于 2012-05-02T13:49:16.360 回答
17

{:key => value}是 ruby​​ 中的旧哈希语法,现在我们有了一个更像 json 的新哈希语法,所以

{:key => value}

是相同的

{key: value}

旧的,我们都熟悉的是:

old_hash = {:simon => "Talek", :lorem => "Ipsum"}

这一切都很好,花花公子,但它可以更简单,更干净。查看 Ruby 1.9 风格,它有点像 JSON:

new_hash = {simon: "Talek", lorem: "Ipsum"}

但现在你仔细观察并问,“但以前钥匙是一个明确的符号,现在这是怎么回事?”。

好吧,你是对的,新符号是最常见的哈希样式的语法糖,即所谓的对象哈希符号。如果您在 irb 中执行此操作,您将看到 ruby​​ 返回旧学校哈希,其中符号用作键:

> new_hash = {simon: "Talek", lorem: "Ipsum"}
=> {:simon=>"Talek", :lorem=>"Ipsum"} 

如果您需要将任意对象作为散列键,您仍然必须使用老式方法。

参考:http ://breakthebit.org/post/8453341914/ruby-1-9-and-the-new-hash-syntax

于 2012-05-02T13:50:56.983 回答