Pergunta

Esta questão já tem uma resposta aqui:

Onde posso encontrar uma explicação do que os meios de operador => em Ruby?

Por exemplo,

class Acct < ActiveRecord::Base
  validates_confirmation_of :password, :email_address, :on => :create
end

O que é o operador => fazer neste caso?

Foi útil?

Solução

O símbolo "=>" não é um operador. É apenas um meio sintáticas para expressar que há uma relação de "key-value" entre os outros dois elementos. Ele é usado para definir hashes (ou arrays associativos, como são chamados em alguns outros idiomas, por exemplo. PHP). Neste sentido, porque "=>" não é um operador, que não faz nada (assim como símbolos "[" e "]" não fazer nada quando usado para definir uma matriz). Se você ainda está confuso, ter um olhar para a classe Hash Ruby e compará-lo com a classe Array.

Outras dicas

O " Hash foguete " Sintaxe

O símbolo não é um operador, apenas uma parte da sintaxe que é usada para definir um objeto Hash literal. É muitas vezes chamado de hash de foguete .

Normalmente, um objeto hash literal seria definida algo como isto:

a = { :x => 1, :y => 2 } # same thing as: a = Hash.new; a[:x] = 1; a[:y] = 2

Pode ser passado para um método, é claro:

def f(x); end; f({:x => 1, :y => 2})

Quando isso acontece, quando um hash é passado como o último parâmetro para um método, a parte {} do objeto literal pode ser descartado:

f(:x => 1, :y => 2)

Os parênteses também são opcionais, então temos coisas como:

f :x => 1:, :y => 2 # and of course...
validates_confirmation_of :password, :email_address, :on => :create

Finalmente (em Ruby moderna só) para o caso específico em que a chave de hash é um símbolo, você pode escrever tecla : valor , assim:

f x: 1, y: 2 # not to mention...
validates_confirmation_of :password, :email_address, on: :create

Note aqui que chamadas de método pode ser feito dentro de definições de classe. Eles são executados como qualquer outra chamada de método, mas no momento da definição. Eles são particularmente úteis para um pacote como Rails que faz lotes de metaprogramming para estender a linguagem e os objetos de biblioteca para seu domínio de aplicação.

Para expandir a resposta aceita (não é um operador), pense nisso, basicamente, da mesma forma como uma vírgula.

{ "foo" => "bar", "a" => "b" }

A vírgula separa cada par no hash, o => separa a chave e o valor no interior do par.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top