Hash w 1.9 i stworzenie klucza ze string

w ruby 1.8 zdarza mi się robić w hashach coś takiego:

"#{string}_sth".to_sym => value

Jak osiągnąć ten sam efekt w hashach z 1.9?

"#{string}_sth".to_sym

zwraca symbol, można również to krócej zapisać:

:"#{string}_sth"

Ale to co napisałeś działa w Ruby 1.9.

Pewnie chodzi ci jednak o coś innego. Mógłbym zaprezentować większy fragment kodu ?

Tak, to działa w 1.9 ale nie jest zgodne z nową składnią hashy. Ciekawi mnie jak to zrobić zgodnie z nową składnią

p.s. dzięki za ten krótszy zapis

Zdaje się, że się nie robi. Nowa składnia jest bardzo ogarniaczona ale można mieszać obie.

irb(main):002:0> {key: "value", :"key#{1+1}" => "value2"} => {:key=>"value", :key2=>"value2"}

Warto się zastanowić, czy naprawdę potrzebujesz symbol? Symbole nie są sprzątane przez GC, a ich dynamiczne tworzenie może doprowadzić do dużego zużycia pamięci.

Nowy zapis szymboli w hashu ma tylko zastosowaniu przy przypisywaniu bezpośrednio do klucza symbolu, a nie jak chcemy dodatkowo konwertować. Jak napisał paneq, stosowanie nowej składni odwołania do symboli jest ograniczone.

Stosowanie symboli w hashu ma tą zaletę, że przy wielokrotnym wykorzystaniu tej samej nazwy symbolu, odwołujemy się poprzez referencję do raz zadeklarowanego obszaru w pamięci (nazwy klucza). Sevos masz rację, że może doprowadzić to do dużego zużycia pamięci, ale przy stosowaniu tego z głową, pomijając sytuację konwersji stringa na hash, możemy zaoszczędzić miejsce w pamięci i wykonywane operacje.