2010-03-05 3 views

Antwort

25
"%+d" % song_change 

String#% formatiert die rechte Handseite entsprechend den Druck Spezifizierer in der Zeichenkette. Der Druckspezifizierer "% d" bedeutet dezimal aka. Ganzzahl, und das "+", das dem Druckspezifizierer hinzugefügt wird, zwingt das entsprechende Zeichen, immer gedruckt zu werden.

Weitere Informationen zu Druckspezifizierern finden Sie unter Kernel#sprintf oder man page for sprinf.

Sie können auf einmal mehr als eine Sache formatieren, indem in einem Array übergeben:

song_count = 45 
song_change = 10 
puts "Songs: %d (%+d from last week)" % [song_count, song_change] 
# => Songs: 45 (+10 from last week) 
1

Sie könnten Fixnum eine Methode namens to_signed_s hinzufügen, aber das ist vielleicht zu viel. Sie würden jedoch kopieren und einfügen, was gut wäre.

Personall, ich würde nur eine StringUtil-Klasse schreiben, um die Konvertierung zu behandeln.

Alternativ wäre eine bessere OO-Lösung, das FixNum in eine Halterklasse zu wickeln und die TO_s der Klasse zu überschreiben.

IE: Erstellen Sie eine Klasse namens SignedFixnum und wickeln Sie Ihre Fixnum-Objekte darin ein, wenn sie signiert werden müssen.

+0

ich mag Idee einer neuen Klasse. Vielleicht scheint das ein Overkill zu sein, aber nach allem, was wir wissen, könnte es eine Menge anderer Funktionen geben, die da rein gehen könnten. Oder vielleicht gibt es noch nicht, aber es wird später sein. – Shadowfirebird

+0

Das ist ziemlich einfach Decorator Muster, denke ich. Für kleine Projekte ist es Overkill, aber wenn das viel wiederverwendet werden soll, könnte es große Gewinne bringen. –

0

Ich denke, Ihr Original-Code ist gut, es einfach in einen Helfer extrahieren, so dass es nicht Ihre Ansichten nicht verunstaltet und Sie müssen es nicht jedes Mal wiederholen, wenn Sie es verwenden möchten.

Legen Sie es in Ihrer application_helper.rb Datei wie dieser

def display_song_change 
    (song_change >= 0 ? '+' : '') + song_change.to_s 
    end 
1

Wayne geschrieben schon, was ich die beste Option in Betracht ziehen, aber hier ist ein anderer nur zum Spaß ...

"#{'+' if song_change >= 0}#{song_change}"