2015-07-07 4 views
13

Czy istnieje sposób dopasowania na zakresie całkowitym? Staram się usunąć znaki po określonej liczbie znaków i dodać wielokropek. To właśnie chcę zrobić, ale nie pasuje do 1..32.Przypadek pasujący do zakresu liczb całkowitych

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

Odpowiedz

14

Są 2 problemy tutaj:

  1. podczas dopasowywania wzorca Elixir (i Erlang) wzory są oceniane od góry do dołu. W twoim przypadku masz pełną klauzulę catch (ignorowaną zmienną _) powyżej twojego zakresu numerów.
  2. Sprawdzasz, czy wartość dla zakresu 1..32 - byte_size nie zwróci zakresu, zwróci liczbę całkowitą. Jeśli chcesz sprawdzić w zasięgu, musisz użyć guard.

Jeśli zamienić kolejność meczów i używać strażnika to będzie działać:

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

Można też pokroić z 0 zamiast 1 więc pierwszy znak nie ranią poza.