Das habe ich jetzt - was für die Arbeit, die es macht, zu ausführlich aussieht.
@title = tokens[Title].strip! || tokens[Title] if !tokens[Title].nil?
Angenommen, Token sind ein Array, das durch Teilen einer CSV-Zeile erhalten wird. jetzt die funktionen wie streifen! chomp! et. Alle geben null zurück, wenn die Zeichenfolge nicht geändert wurde
"abc".strip! # => nil
" abc ".strip! # => "abc"
Was ist die Ruby-Methode, um es zu trimmen, wenn es zusätzliche führende oder nachfolgende Leerzeichen enthält, ohne Kopien zu erstellen?
Wird hässlicher, wenn ich will tokens[Title].chomp!.strip!
Antworten:
Ich denke, was Sie wollen, ist:
Die
#strip!
Methode wird zurückgegebennil
wenn nichts entfernt wurde, und die Variable selbst, wenn sie entfernt wurde.Gemäß Ruby-Standards ändert eine Methode mit einem Ausrufezeichen die vorhandene Variable.
Hoffe das hilft.
Update: Dies wird ausgegeben
irb
, um zu demonstrieren:quelle
@title.tap &:strip!
? Das scheint sauberer als alles andere.nil
wenn es nicht etwas abstreift? Das hat zweifellos eine Menge Leute verwirrt (da es keinen Sinn macht).Übrigens, jetzt unterstützt Ruby schon nur Strip ohne "!".
Vergleichen Sie:
Auch ist es unmöglich,
strip
ohne Duplikate. Siehe Quellen in string.c:ruby 1.9.3p0 (30.10.2011) [i386-mingw32]
Update 1: Wie ich jetzt sehe - es wurde im Jahr 1999 erstellt (siehe Rev. 372 in SVN):
Update2: Es
strip!
werden keine Duplikate erstellt - sowohl in der Version 1.9.x, 2.x als auch in der Trunk-Version.quelle
strip!
ist es da.strip
. Verstehe ich etwas falsch? Wie sonst könnte ich "unmöglich zu entfernen ohne Duplikat" interpretieren?strip!
akarb_str_strip_bang
.Strip und Chomp müssen nicht entfernt werden, da Strip auch nachfolgende Wagenrückläufe entfernt - es sei denn, Sie haben das Standardtrennzeichen für Datensätze geändert und das ist es, was Sie chompen.
Ollys Antwort hat bereits die kanonische Art, dies in Ruby zu tun. Wenn Sie dies jedoch häufig tun, können Sie jederzeit eine Methode dafür definieren:
Geben:
Beachten Sie auch, dass die if-Anweisung
@title
die Zuweisung verhindert , wenn das Token Null ist, was dazu führt, dass der vorherige Wert beibehalten wird. Wenn Sie möchten oder nichts dagegen haben,@title
immer zugewiesen zu werden, können Sie den Scheck in die Methode verschieben und die Duplizierung weiter reduzieren:Wenn Sie sich abenteuerlustig fühlen, können Sie alternativ eine Methode für String selbst definieren:
Geben Sie eines von:
quelle
Wenn Sie Ruby on Rails verwenden, gibt es ein Quetschen
Wenn Sie nur Ruby verwenden, möchten Sie Strip verwenden
Hierin liegt die Gotcha. In Ihrem Fall möchten Sie Streifen ohne Knall verwenden!
während Strip! gibt sicherlich nil zurück, wenn es keine Aktion gab, aktualisiert es trotzdem die Variable, also Strip! kann nicht inline verwendet werden. Wenn Sie Strip Inline verwenden möchten, können Sie die Version ohne Knall verwenden!
Streifen! mit mehrzeiligem Ansatz
Strip Single Line Approach ... IHRE ANTWORT
quelle
Ich denke, Ihr Beispiel ist ein vernünftiger Ansatz, obwohl Sie es leicht vereinfachen könnten als:
Alternativ können Sie es in zwei Zeilen setzen:
quelle
Wenn Sie eine andere Methode verwenden möchten, nachdem Sie Folgendes benötigt haben:
Auf diese Weise kannst du dich ausziehen und trotzdem etwas tun :)
quelle
Meine Art:
quelle
Wenn Sie entweder Ruby 1.9 oder Activesupport haben, können Sie dies einfach tun
Das ist wirklich cool, da es meiner Meinung nach die
:try
und die:tap
Methode nutzt , die die mächtigsten funktionellen Konstrukte in Ruby sind.Eine noch niedlichere Form, die als Symbole fungiert:
quelle
Es ist durchaus möglich, dass ich das Thema nicht verstehe, aber würde das nicht das tun, was Sie brauchen?
quelle