Czy istnieje notacja dosłowna dla tablicy symboli?


170

Podoba mi się to dosłowne wyrażenie dla tablicy ciągów:

%w( i can easily create arrays of words )

Zastanawiam się, czy istnieje literał, który pozwala uzyskać tablicę symboli. Wiem, że potrafię

%w( it is less elegant to create arrays of symbols ).map( &:to_sym )

ale byłoby wspaniale użyć tylko literału.


Takie podejście byłoby lepsze niż zwykłe tworzenie tablicy symboli? Albo prosta metoda? Meh.
Dave Newton,

w takim razie jaki jest sens w %wzapisie?
m_x

IMO tablica symboli jest już mniej zagracona niż tablica ciągów i ogólnie jest mniej powszechna. YMMV.
Dave Newton,

<troll> wygląda na to, że zespół ruby ​​zgodził się ze mną od czasu Ruby 2 ... </troll>
m_x

3
Możliwy duplikat Utwórz tablicę symboli
sjakobi

Odpowiedzi:


277

Tak! Jest to teraz możliwe w Rubim 2.0.0. Można to napisać tak:

%i{foo bar}  # => [:foo, :bar]

Możesz także użyć innych separatorów, więc możesz również napisać %i(foo bar)lub %i!foo bar!na przykład.

Ta funkcja została pierwotnie ogłoszona tutaj:

http://www.ruby-lang.org/zh_TW/news/2012/11/02/ruby-2-0-0-preview1-released/

Jest to wymienione w oficjalnej dokumentacji Rubiego tutaj:

http://ruby-doc.org/core/doc/syntax/literals_rdoc.html#label-Percent+Strings


3
dzięki, @ MarcelJackwerth już to stwierdził w komentarzu do poprzedniej zaakceptowanej odpowiedzi, ale ja przyjmuję twoją dla potomności.
m_x

3
Zwróć uwagę, że podobnie jak w przypadku innych modyfikatorów, możliwe jest użycie szeregu innych ograniczników. np %i[foo bar], %i{foo bar}, %i!foo bar!, %i%foo bar%.
user664833

1
Jeśli chcesz podkreślić wsparcie dla tego w TextMate lub Sublime Text, sprawdź mój zmodyfikowany plik .tmLanguage w tym streszczeniu .
Ben Kreeger,

1
według rubocopa zaleca się użycie%i[foo bar]
Mapad

26

Niestety w Ruby 1.x lista dostępnych % -delimiterów jest ograniczona

Modifier    Meaning
%q[ ]       Non-interpolated String (except for \\ \[ and \])
%Q[ ]       Interpolated String (default)
%r[ ]       Interpolated Regexp (flags can appear after the closing delimiter)
%s[ ]       Non-interpolated Symbol
%w[ ]       Non-interpolated Array of words, separated by whitespace
%W[ ]       Interpolated Array of words, separated by whitespace
%x[ ]       Interpolated shell command

szkoda ... ale dzięki za link i listę. nie wiedział %x, wydaje się bardziej czytelny niż notacja odwróconych znaków, której używam
m_x

3
cóż, nie tak niefortunnie dla tych, którzy ledwo potrafią utrzymać istniejące w swoich głowach (to byłbym ja).
tokland

26
W Ruby 2.0 otrzymamy% i dla tablic symboli, zobacz: ruby-lang.org/zh_TW/news/2012/11/02/ ...
Marcel Jackwerth
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.