【问题标题】:What is the difference between this: and :this? [duplicate]this: 和 :this 有什么区别? [复制]
【发布时间】:2013-08-09 06:59:24
【问题描述】:

冒号在开头和结尾使用时表示什么?我认为乞求某事时的冒号(例如:set_cart)表示一种方法。它是否正确?以下是几个例子:

<%= button_to "Checkout", new_order_path, method: :get %>
<%= button_to "Empty Cart", @cart, method: :delete,
    data: {confirm: 'Are you sure?' } %>

编辑:另一个例子

before_action :set_cart, only: [:new, :create]
before_action :set_order, only: [:show, :edit, :update, :destroy]

【问题讨论】:

  • 这是一个符号,如果您想了解更多信息,互联网上有很多关于此的资源,但您可以查看该帖子,例如:robertsosinski.com/2009/01/11/… :)
  • @Sparda "This is a symbol" 如果您不指定您指的是:this 而不是this:,则不是很有帮助。
  • @AndrewGrimm 据我所知,没有哈希和其他东西的微妙之处,它们都是符号......

标签: ruby


【解决方案1】:

某事物开头处的冒号表示Ruby Symbol 对象。

> :name.class
=> Symbol

某事物结尾处的冒号表示Ruby Hash 对象中的符号键。这种新的 Hash 语法是在 Ruby 1.9 中引入的。

> hash = { key: 'val' }
=> {:key=>"val"}

当它们一起使用时,正如预期的那样,它会创建一个哈希对,其中键和值都是符号。

> { key: :val }
=> {:key => :val}

【讨论】:

    【解决方案2】:

    这是 symbol-indexed 哈希的新语法,在 Ruby 1.9 中引入(我相信)。

    现在可以写成{ key: 'value' },而不是旧的{ :key =&gt; 'value' }。在引擎盖下哈希是完全相同的,所以它只是一个真正的符号变化。

    2.0.0p247 :001 > { key: 'value' }
     => {:key=>"value"}
    

    在您的示例中,method: :delete 只是一种不同的写作方式 :method => :delete。

    【讨论】:

    • 此外,OP 的示例代码利用了方法调用约定,即在方法调用结束时找到的哈希键/值语法被汇总到单个 Hash 参数中。
    猜你喜欢
    • 2013-05-26
    • 1970-01-01
    • 2010-11-06
    • 2011-04-12
    • 1970-01-01
    • 2011-04-10
    • 2015-08-29
    • 2012-10-06
    相关资源
    最近更新 更多