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.

m_x
źródło
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

David Grayson
źródło
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
Gareth
źródło
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