Veja alguns exemplos de utilização de símbolos:
redirect_to :action => :index
<% form_tag :action => :enviar_eventos do %>
usuario.update_attribute(:tel, "2222-2222")
Veja isso:
a = :"www.casaopen.com.br" a.object_id #=> 166478 :'www.casaopen.com.br'.object_id # => 166478
Isso que dizer que os símbolos são de, certa forma, imutáveis ou seja eles permanecem no ciclo de vida do seu projeto.
Símbolos são representações de sequências, veja:
a = :"Ruby On Rails" #=> :"Ruby On Rails" a.class #=> Symbol puts a #=> Ruby On Rails #=> nil # 'puts a' imprime a sequência de a que é semelhante ao puts em uma String...
b = "Ruby On Rails" #=> "Ruby On Rails" b.class #=> String puts b #=> Ruby On Rails #=> nil
Em vista disso, qual é a importância dos símbolos?
Eles são uma ótima forma de representar sequências que não necessitam de alterações em tempo de execução e também não necessitam de todos os métodos da classe String! Dúvida? Execute o seguinte código e veja o resultado.
a = :"Ruby on Rails" b = "Ruby on Rails" a.methods.size b.methods.size
Para maiores informações veja esse post que explica todas as formas possíveis de simbolos.
Æ!!
ResponderExcluirMuito vago seu post cara :(
O symbol tem várias vantagens, como por exemplo:
for i in 0..20
puts "bla".object_id
end
for i in 0..20
puts :bla.object_id
end
No segundo caso ele vai criar apenas um objeto na memória, diferentemente da string que ele cria um objeto a cada passagem no loop.
Tem algumas precauções a usar simbols tambem, afinal, eles ficam mais tempo na memória, mas há bastante discussão sobre isso, de uma procurada depois por que vale a pena! :)
Há braços
Um outro ponto muito importante sobre os simbolos em ruby que vc esqueceu de comentar é o uso deles na metaprogramação. Por exemplo
ResponderExcluir"10".send :to_i
Sem simbolos isso nunca seria possivel. Claro que, vc pode fazer
"10".send "to_i"
porém isso só é permitido pq o ruby está dando o cast pra vc.
E os introspections como
10.respond_to? :to_s
também só occorem com uso de simbolos. Claro que, da mesma forma que para reflection, com introspections vc também pode usar uma string, porém, novamente, só pq o ruby da o cast por vc.
Inté mais!