Что означает =› в Ruby и как это работает?

Изучая Ruby, я иногда сталкивался с оператором "=>". Обычно я вижу его в виде

:symbol => value

и он похоже часто используется при передаче значений функциям. Как именно называется этот оператор? Что это делает/означает? Это встроено в Ruby или это что-то, что различные фреймворки, такие как Rails и DataMapper, добавляют к классу символов? Используется ли он только в сочетании с классом символов? Спасибо.


person Dustin Martin    schedule 11.01.2011    source источник


Ответы (5)


=> отделяет ключи от значений в литерале хэш-карты. Он не перегружается и специально не связан с символами.

Литерал хэш-карты имеет форму {key1 => value1, key2 => value2, ...}, но при использовании в качестве последнего параметра функции вы можете не использовать фигурные скобки. Поэтому, когда вы видите вызов функции, такой как f(:a => 1, :b => 2), f вызывается с одним аргументом, который представляет собой хэш-карту с ключами :a и :b и значениями 1 и 2.

person sepp2k    schedule 11.01.2011
comment
Для получения дополнительной информации см. кирку учебный раздел по хэшам и справочный раздел по хэшам. Обратите внимание, что в Ruby 1.9 вы можете альтернативно указать литеральную пару ключ/значение в хэше, подобном этому foo: bar, который создает ключ как символ :foo. - person Phrogz; 12.01.2011
comment
Разбивайте большие проблемы на более мелкие. Если вы познакомитесь с ассоциативными массивами и рубиновыми символами, у вас не возникнет проблем с пониманием хэшей. - person karatedog; 12.01.2011
comment
Чтобы пояснить, вот пример свойства DataMapper :title, String, :required =› true, :length =› 5..200 Это то же самое, что и property(:title, String, {:required =› true, :length =› 5..200}) ? - person Dustin Martin; 12.01.2011
comment
Но мы также можем использовать этот => с спасением... Например, begin ... rescue SignalException, Interrupt, SystemExit => e...end - person S.Goswami; 10.09.2019

Вы могли слышать, что этот оператор называется «хеш-ракетой», что означает, что вы используете его при определении рубинового хэша.

Это документация по Ruby Hash, если вы не знакомы: http://www.ruby-doc.org/core/classes/Hash.html

Обратите внимание, что в Ruby 1.9, если вы определяете хеш, который использует символы в качестве ключей, теперь вам доступен альтернативный синтаксис: http://blog.peepcode.com/tutorials/2011/rip-ruby-hash-rocket-syntax

person jmcnevin    schedule 11.01.2011

Совет: если вы используете его в хэше, таком как {:a => "A", :b => "B"}, в Ruby 1.9 вы можете использовать его как хэш JSON:

{
  a: "A",
  b: "B"
}
person amrnt    schedule 11.01.2011

Если вы хотите продолжить гугление, => иногда называют хешрокетом, потому что он выглядит как ракета (в том же смысле, что <=> выглядит как космический корабль) и используется в хэшах.

Или вы можете использовать SymbolHound.

person Andrew Grimm    schedule 11.01.2011
comment
Это хорошо знать. Я довольно много искал в Google информацию об этом, но ничего не нашел. Спасибо за чаевые. - person Dustin Martin; 12.01.2011
comment
@DustinMartin Недавно я наткнулся на поисковую систему под названием SymbolHound, если у вас возникли трудности с поиском другого синтаксиса. - person Andrew Grimm; 04.04.2012

В дополнение к В Ruby что делает = › означает и как это работает?:

В основном вы увидите => для определения параметров функции. Думайте об этом как о приятном удобстве: вам не нужно запоминать правильный порядок ваших параметров, так как все параметры заключены в гигантский хэш. Итак, если у вас есть простой вспомогательный метод, например

link_to "My link", my_path, :confirm => "Are you sure?"

это намного лучше, чем

link_to "My link", my_path, null, null, null, null, "Are you sure?"

просто потому, что вы хотите использовать редко используемый параметр. Таким образом, передача параметров с помощью хэша — это просто соглашение в Ruby/Rails, призванное упростить жизнь.

person d135-1r43    schedule 12.01.2011
comment
это также неправильно, так как вы просто использовали бы link_to "My link", my_path, confirm: "Are you sure?" - person Tim Kretschmer; 25.08.2020