2010-12-15 8 views
32

Ich habe die folgende, die gut funktioniert:Rails - Die Verwendung von% W

def steps 
    %w[hello billing confirmation] 
end 

steps.first 

Aber ich möchte, dies zu tun:

def step_title 
    %w['Upload a photo' 'Billing Info' 'Confirmation Screen'] 
    end 

steps.first 

Wie w% für das zulassen? Ich habe versucht, eine Google-Suche, aber Google ist schwach mit diesen Arten von Charakteren.

Dank

Antwort

39

%w erstellt ein "Array von Wörtern" und verwendet Leerzeichen, um jeden Wert zu trennen. Da Sie auf einem anderen Wert trennen wollen (in diesem Fall Leerzeichen außerhalb Sätze von Anführungszeichen) verwenden, nur einen Standard-Array:

['Upload a photo', 'Billing Info', 'Confirmation Screen'] 
+0

Woher weißt du das? Es ist immer gut, auf eine Quelle wie die offizielle Ruby-Dokumentation zu verweisen: http://ruby-doc.org/core/doc/syntax/literals_rdoc.html#label-Percent+Strings – maikel

2

%w[hello billing confirmation] ist Syntax Zucker für ["hello", "billing", "confirmation"]. Es teilt Ruby mit, die Eingabezeichenfolge basierend auf dem Leerzeichen in Wörter aufzuteilen und ein Array der Wörter zurückzugeben. Wenn Ihr spezifischer Anwendungsfall bedeutet, dass die Werte im Array Leerzeichen enthalten dürfen, können Sie %w nicht verwenden.

In Ihrem Fall genügt ['Upload a photo', 'Billing Info', 'Confirmation Screen'].

+0

Ohne Kommas, die jeden Wert trennen, werden die Strings verkettet und das resultierende Array wird eine einzelne Zeichenfolge enthalten. –

+0

Wie habe ich das nicht verstanden .... – yfeldblum

9

können Sie auch den umgekehrten Schrägstrich Räume zu entkommen:

%[email protected]\ bar [email protected] 

ist die gleiche wie:

[ 'foo bar', 'bang' ] 

In Ihrem Beispiel würde ich nicht die %w Schreibweise verwenden, da es nicht so klar.

PS. Ich die Begrenzungszeichen wie Mischen, nur Teammitglieder zu ärgern :) So:

%w?foo bar? 
%w|foo bar| 
%w\foo bar\ 
%w{foo bar} 
+2

Ich ärgere meine Teammitglieder so sehr. – Ringo

26

%w() ist ein „Wortfeld“ - die Elemente werden durch Leerzeichen getrennt.

Es gibt andere Dinge%:

%r() ist ein weiterer Weg, um einen regulären Ausdruck zu schreiben.

%q() ist ein weiterer Weg, um einen einfachen Anführungszeichen Zeichenfolge zu schreiben (und kann mit mehreren Leitungen sein, was nützlich ist)

%Q() ergibt einen doppelten Anführungszeichen Zeichenfolge

%x() ein Shell-Befehl ist.

1

Ein Grund, warum Sie% w (xxx) über ["xxx", "xx1"] verwenden möchten, ist, dass Sie mit% w den Inhalt zur besseren Lesbarkeit formatieren können.Zum Beispiel, wenn Sie viele statische Werte haben, die in einem Array hartcodiert sind, sind sie viel einfacher zu lesen, wenn wie diese gestapelt:

  assets.precompile += %w( 
           bootstrap-datepicker.js 
           datepicker.css 
           flower_chart.js 
           jquery.flower-sort.js 
           bootstrap-timepicker.js 
           bootstrap-timepicker.css 
           admin.css 
           admin.js 
           flower_feature.js 
           jquery.flower.tooltip.min.js 
           jquery.infinite-flowers.js 
           data-flowers.bootstrap.min.js 
           jquery.monkey-flowers.min.js) 

als abgeflachte und umgeben von Anführungszeichen und Kommas wie diese

["bootstrap-datepicker.js", "datepicker.css", "flower_chart.js", "jquery.flower-sort.js", "bootstrap-timepicker.js", "bootstrap-timepicker.css", "admin.css", "flower_feature.js", "jquery.flower.tooltip.min.js", "jquery.infinite-flowers.js", "data-flowers.bootstrap.min.js", "jquery.monkey-flowers.min.js"] 

noch ergeben beide genau das gleiche Array.

Verwandte Themen