Utwórz tablicę symboli


134

Czy jest lepszy sposób na zrobienie czegoś takiego?

%w[address city state postal country].map(&:to_sym) 
#=> [:address, :city, :state, :postal, :country]

Myślałem, że %szrobiłbym to, co chciałem, ale tak się nie dzieje. Po prostu bierze wszystko między nawiasami i tworzy z tego jeden duży symbol.

Tylko drobna irytacja.


1
To dość standardowe. Czy jest coś w Twojej implementacji, co sprawia, że ​​ta metoda jest niepożądana?
dwhalen

5
Nie "naprawdę", ale Railsy często mają taki cukier syntaktyczny, który sprawia, że ​​czuję mrowienie w środku podczas używania. :)
Drew


Odpowiedzi:


364

Oryginalna odpowiedź została napisana we wrześniu 2011 roku, ale począwszy od Rubiego 2.0 , istnieje krótszy sposób tworzenia tablicy symboli! Ten dosłowny:

%i[address city state postal country]

zrobi dokładnie to, co chcesz.


3
Zawsze zapominam, że oznacza to „intern”, alternatywę dla „to_sym”. Zobacz codecademy.com/forum_questions/512a675cf116c52d0d00674b
A5308Y,

Zwróć uwagę na nacisk na ruby ​​2. Nie jest to pokazane w książce Ruby Programming Language, ponieważ dotyczy tylko do 1.9.3.
Donato

Kiedy używam składni literału% ruby'ego, wolę używać dwóch niealfanumerycznych znaków zamiast nawiasów, np.%i|a b c|
Epigene

6
Chociaż robi to, co chcesz, każdy, kto widzi to w twoim kodzie, będzie musiał go wygooglować, aby dowiedzieć się, jaką dziwaczną składnię Ruby rzucił nam tym razem. Gorąco polecam unikanie niejasnych funkcji językowych, gdy istnieją doskonale czytelne alternatywy, np. [: Adres,: miasto,: stan].
Alex,

1
@Alex: nie jest to „mało znana funkcja językowa”, chociaż może tak było, kiedy pisałeś swój komentarz, ale teraz jest to przyjęty styl. rubystyle.guide/#percent-literal-braces
Dmitri

93

Ponieważ istnieje ryzyko, że stanie się zbyt dosłowny, myślę, że najczystszym sposobem skonstruowania tablicy symboli jest użycie tablicy symboli.

fields = [:address, :city, :state, :postal, :country]

Nie mogę wymyślić nic bardziej zwięzłego niż to.


12
Czy masz na myśli „zbyt dosłowne”?
Andrew Grimm,

Zawsze lubię znajdować i wykorzystywać najpotężniejsze i zwięzłe sposoby robienia rzeczy. Ta odpowiedź to w rzeczywistości mniej naciśnięć klawiszy niż moja dla tej konkretnej listy, ale przy liście ~ 9 lub więcej elementów alternatywa byłaby krótsza. Dziękuję za odpowiedź. :)
Drew

4
Myślę, że w tym przypadku czytelność wygrywa. Ta odpowiedź jest DUŻO bardziej czytelna (IMO) niż alternatywa% w / to_sym. Nie pozwól, aby następny programista, który przejmie Twoje rzeczy, zechciał uderzyć Cię w gardło.
Bruce Hubbard,

3

%i[ ] Nieinterpolowana tablica symboli oddzielona białymi znakami (po Ruby 2.0)

%I[ ] Tablica interpolowana symboli oddzielonych białymi znakami (po Ruby 2.0)

%i[address city state postal country]

najczystszym sposobem na to jest:

%w[address city state postal country].map(&:to_sym)

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.