Symbol x String x Hash

9 respostas
saoj

Qual exemplo abaixo vcs acham mais correto? Por que?

points = { :maca => 2, :pera => 3, :uva => 1 }

puts "Digite uma fruta: "

fruta = gets.chomp.to_sym

puts "Points: #{points[fruta]}"
points = { 'maca' => 2, 'pera' => 3, 'uva' => 1 }

puts "Digite uma fruta: "

fruta = gets.chomp

puts "Points: #{points[fruta]}"

Lembrando que

C:\java\ruby>irb
irb(main):001:0> a = { :pera => 1 }
=> {:pera=>1}
irb(main):002:0> puts a["pera"]
nil
=> nil
irb(main):003:0> a = { "pera" => 1 }
=> {"pera"=>1}
irb(main):004:0> puts a[:pera]
nil
=> nil

9 Respostas

louds

O segundo pois é menos e não faz sentido usar um símbolo nesse caso.

saoj

Me falta a visão para entender porque :pera != “pera”. Entendo que eles são objetos diferentes, mas pelo menos para hash eles poderia ser considerados equivalentes ou não?

Isso faz com que vc precise saber de antimão se vc vai passar uma key que é um Symbol ou uma key que é uma String.

cv1

http://www.railsbrain.com/api/rails-1.2.3/doc/index.html?a=C00000051&name=HashWithIndifferentAccess

Proteu_Alcebidiano

saoj:
Me falta a visão para entender porque :pera != “pera”. Entendo que eles são objetos diferentes, mas pelo menos para hash eles poderia ser considerados equivalentes ou não?

Isso faz com que vc precise saber de antimão se vc vai passar uma key que é um Symbol ou uma key que é uma String.

Seria justo uma comparação entre

public class Pera { // sem nada dentro mesmo }

e

:pera

?
T+

saoj

http://www.railsbrain.com/api/rails-1.2.3/doc/index.html?a=C00000051&name=HashWithIndifferentAccess

Legal! Valeu! Nome meio grande, mas é isso aí mesmo.

E essa documentação é BEM melhor que a RDoc. Aquela caixa de texto para filtrar os métodos é bem prática… Tem como ver a documentação do Ruby nesse estilo ou tô pendindo muito? :slight_smile:

bzanchet

Porque, ao contrário do java, no Ruby as strings são mutáveis. E symbols não (e notar que symbols nunca são garbage-collected).

Prefira símbolos nos hashs, porque, além de serem imutáveis, são objetos um pouco mais leves do que Strings.

bzanchet

gotapi.com ?

louds

Porque, ao contrário do java, no Ruby as strings são mutáveis. E symbols não (e notar que symbols nunca são garbage-collected).

Prefira símbolos nos hashs, porque, além de serem imutáveis, são objetos um pouco mais leves do que Strings.

Lembrando que symbols são sempre interned, enquanto não existe essa exigencia p/ strings.

rubinelli

Bem lembrado, louds. Se você pensar em strings como o equivalente a StringBuilders e symbols como interned Strings não vai estar muito longe.

Criado 4 de março de 2008
Ultima resposta 7 de mar. de 2008
Respostas 9
Participantes 6