Где я могу найти объяснение того, что означает оператор =>
в Ruby?
Например,
class Acct < ActiveRecord::Base
validates_confirmation_of :password, :email_address, :on => :create
end
что делает оператор =>
в этом случае?
Где я могу найти объяснение того, что означает оператор =>
в Ruby?
Например,
class Acct < ActiveRecord::Base
validates_confirmation_of :password, :email_address, :on => :create
end
что делает оператор =>
в этом случае?
Символ "= > " не является оператором. Это просто синтаксическое средство для выражения того, что между двумя другими элементами существует взаимосвязь "ключевой ценности". Он используется для определения хэшей (или ассоциативных массивов, поскольку они называются на некоторых других языках, например PHP). В этом смысле, поскольку "= > " это не оператор, он ничего не делает (так как символы "[" и "]" ничего не делают, когда используются для определения массива). Если вы все еще запутались, просмотрите класс Hash Ruby и сравните его с классом Array.
Символ не является оператором, просто частью синтаксиса, который используется для определения литерального объекта Hash. Его часто называют хеш-ракетой.
Обычно литеральный хэш-объект будет определен примерно так:
a = { :x => 1, :y => 2 } # same thing as: a = Hash.new; a[:x] = 1; a[:y] = 2
Он может быть передан методу, конечно:
def f(x); end; f({:x => 1, :y => 2})
Как это происходит, когда хэш передается как последний параметр метода, часть {}
литерала объекта может быть отброшена:
f(:x => 1, :y => 2)
Параны также являются необязательными, поэтому мы получаем такие вещи, как:
f :x => 1:, :y => 2 # and of course...
validates_confirmation_of :password, :email_address, :on => :create
Наконец (только в современном Ruby) для конкретного случая, когда хеш-ключ является символом, вы можете записать значение :, поэтому:
f x: 1, y: 2 # not to mention...
validates_confirmation_of :password, :email_address, on: :create
Обратите внимание, что вызовы методов могут быть сделаны в определениях классов. Они выполняются как любой другой вызов метода, но во время определения. Они особенно полезны для такого пакета, как Rails, который делает много метапрограммирования для расширения языка и объектов библиотеки для своего домена приложения.
Чтобы расширить принятый ответ (это не оператор), подумайте об этом в основном так же, как и запятая.
{ "foo" => "bar", "a" => "b" }
Запятая разделяет каждую пару в хэше, =>
разделяет ключ и значение внутри пары.