Ich gehe durch eine Online-Lektion , die normalerweise eine sehr einfache Ein-Zeilen-Lösung hat. Ein Problem besagt, dass angesichts des folgenden Arrays:
%Vor% Ich muss #inject
verwenden, um eine einzelne Zeichenfolge aller Namen zusammen mit einer Zeichenfolge zu erhalten, wobei jeder Name mit einem Anfangsbuchstaben versehen ist:
Obwohl dies leicht mit #map
und #join
durchgeführt werden könnte, erfordert diese spezielle Übung nur die Verwendung von #inject. Ich habe mir so etwas ausgedacht:
was mir geben würde:
%Vor%wobei der Whitespace am Ende der Zeichenfolge nicht als die richtige Lösung übergeben wird.
#inject
zu verwenden und eine leere Zeichenfolge zu übergeben? <<
richtig, um Strings zu kombinieren? Versuchen Sie Folgendes:
%Vor%Ich glaube nicht, dass du mit inject aus dem extra Raum entkommen kannst. Sie müssen auch
tun %Vor%BEARBEITEN: da die Anweisung geändert wurde, um Sie zu zwingen, Join und Map nicht zu verwenden, ist hier eine etwas hässliche Lösung mit inject:
%Vor% Es gibt bessere Möglichkeiten als #inject
, siehe die anderen Antworten. Aber wenn Sie darauf bestehen, könnten Sie nur String#rstrip
das nachgestellte Leerzeichen.
Oder drehen Sie den Block um und prüfen Sie, ob das Memo leer ist, bevor Sie das Zeichen hinzufügen.
%Vor% Ich bin mir nicht sicher über den Operator <<
. Ich würde +
verwenden, aber das ist wahrscheinlich nur eine persönliche Vorliebe.
Das Überprüfen von " "
in jeder Runde ist teurer als
chop!
letzte Ausgabe. Wenn Sie sich für <<
entscheiden, können Sie String-Verkettung anzeigen.
Benutze #inject
nicht, es gibt bessere Wege das zu lösen:
Ihr erstes Ziel sollte immer sein, das Problem zu lösen. Sie könnten #inject
verwenden, aber es ist einfach nicht die ideale oder sogar klare Lösung hier. Du hast bessere Dinge mit deiner Zeit zu tun, als herauszufinden, wie du #inject
dazu bringst, dir die richtigen Ergebnisse zu geben.