【问题标题】:What is the difference between colon placement in :something and somethingelse: [duplicate]在:something 和 somethingelse 中的冒号位置有什么区别:[重复]
【发布时间】:2012-05-12 00:05:07
【问题描述】:

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

【问题讨论】:

  • Symbol : value 只出现在 hash 表达式中作为缩短它的一种方式,但我没有发现很多人喜欢它。

标签: ruby-on-rails ruby


【解决方案1】:

:whatever 是一个符号,你没看错。

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

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

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

{key: value, another_key: another_value}

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

【讨论】:

  • 非常感谢!
  • 您的最后一条语句会引起混淆。我不认为key: 是ruby 中的符号,但是当这种语法出现在大括号内时,ruby 将其识别为符号。此外,提供 hashrocket 语法不仅是为了向后兼容。事实上,如果你想用非符号键定义哈希,你需要依赖哈希火箭语法。我会说新的 json 样式语法更像是一种语法糖。
【解决方案2】:

{: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

【讨论】:

    猜你喜欢
    • 2015-04-11
    • 2012-01-02
    • 2013-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-11
    相关资源
    最近更新 更多