2015-07-07 7 views
13

Gibt es eine Möglichkeit, einen Ganzzahlbereich abzugleichen? Ich möchte Zeichen nach einer bestimmten Anzahl von Zeichen entfernen und eine Ellipse hinzufügen. Dies ist, was ich tun möchte, aber nicht auf 1..32 übereinstimmen.Groß-/Kleinschreibung im Ganzzahlbereich

def cutoff(title) do 
    case byte_size(title) do 
     _ -> title 
     1..32 -> String.slice(title, 1..32) <> " ..." 
    end 
end 

Antwort

14

Es gibt zwei Probleme hier:

  1. Wenn Mustervergleich in Elixir (und Erlang) die Muster von oben nach unten ausgewertet werden. In Ihrem Fall haben Sie eine catch all-Klausel (die ignorierte Variable _) über Ihrem Nummernbereich.
  2. Sie überprüfen mit dem Wert für den Bereich 1..32 - byte_size wird keinen Bereich zurückgeben, es wird eine ganze Zahl zurückgeben. Wenn Sie innerhalb eines Bereichs prüfen möchten, müssen Sie eine guard verwenden.

Wenn Sie die Reihenfolge der Begegnungen tauschen und eine Wache verwenden dann wird es funktionieren:

def cutoff(title) do 
    case byte_size(title) do 
     x when x in 1..32 -> String.slice(title, 1..32) <> " ..." 
     _ -> title 
    end 
end 

Sie auch von 0 statt 1 so das erste Zeichen wird nicht geschnitten, in Scheiben schneiden möchten erhalten aus.

Verwandte Themen