2013-08-07 3 views
0

Что обозначает двоеточие, когда оно используется в начале и в конце чего-то? Я думаю, что двоеточие за попрошайничеством (например, :set_cart) обозначает метод. Это верно? Вот несколько примеров:В чем разница между этим: и: этим?

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

Edit: Другой пример

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

Это символ, если вы хотите узнать больше есть много ресурсов, об этом в Интернете, но вы можете проверить, что запись к примеру: http://www.robertsosinski.com/2009/01/ 11/the-difference-between-ruby-symbols-and-strings /:) – Raindal

+0

@Sparda «Это символ» не очень полезно, если вы не указали, что имеете в виду ': this', а не' this : '. –

+0

@AndrewGrimm хорошо, насколько я знаю, без тонкостей хэшей и т. Д., Они оба являются символами ... – Raindal

ответ

3

Двоеточие в начало что-то обозначает Ruby Symbol объект.

> :name.class 
=> Symbol 

двоеточие в конце что-то обозначает символ ключа в Ruby, Hash объекта. Этот новый синтаксис Hash был введен в Ruby 1.9.

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

Когда они используются вместе, как и ожидалось, он создает хеш-пару с ключом и значением, которые являются символами.

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

Это новый синтаксис для symbol -indexed хэш, введенного (я считаю) в Ruby 1.9.

Вместо старого { :key => 'value' } вы можете написать { key: 'value' }. Под капотом хеш точно такой же, так что это всего лишь изменение нотации.

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

В вашем примере метод:: delete - это просто другой способ записи: method =>: delete.

+1

Кроме того, примерный код OP использует соглашение о вызове метода, в котором хэш-ключ/синтаксис значений, найденный в конце вызова метода свертывается в один параметр «Хэш». –

Смежные вопросы