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?
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.