Symbol x String x Hash

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

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

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.

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

[quote=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.

[/quote]

Seria justo uma comparação entre

public class Pera { // sem nada dentro mesmo }

e

:pera

?
T+

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

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:

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.

gotapi.com ?

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.[/quote]

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

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