2015-12-03 26 views

Odpowiedz

12

Istnieje String.strip/1, który zamieni 3 przykłady na "", z którymi można porównać.

iex(4)> String.strip("\n") == "" 
true 
iex(5)> String.strip("") == "" 
true 
iex(6)> String.strip(" ") == "" 
true 

Wystąpił problem ten temat https://github.com/elixir-lang/elixir/pull/2707

+1

Co, jeśli chcę to zrobić wewnątrz strażnika? – nicooga

+0

Pasek został łagodnie zdeprecjonowany w eliksir> 1.3.0. https://github.com/elixir-lang/elixir/releases/tag/v1.3.0 – stevendaniels

+3

@nicooga, jeśli chcesz sprawdzić puste ciągi wewnątrz strażnika, spróbuj: 'when binary_part (string, 1, - 1) '' –

3

Opublikowałem małą bibliotekę, aby zrobić to poprawnie dla dowolnego typu danych. Wprowadza identyczne zachowanie, jak metoda Rails 'blank? w Elixir, o ile jest to możliwe.

Biblioteka jest tutaj: https://github.com/samphilipd/blankable

Aby zainstalować dodatek blankable do listy zależnościami w mix.exs:

def deps do 
    [{:blankable, "~> 0.0.1"}] 
end 
1

dlaczego nie wystarczy użyć wzór pasujący

iex> a = "" 
"" 
iex> b = "b" 
"b" 
iex> ^b = "b" 
"b" 
iex> ^a = "your String" 
** (MatchError) no match of right hand side value: "" 
iex> ^a = "" 
"" 

lub lepszy jednak sprawdź jego rozmiar bajtowy:

iex> if byte_size("") == 0 do true else false end 
true 
iex> if byte_size("a") == 0 do true else false end 
false 
+0

Dopiero zacząłem uczyć się Eliksiru, ale nawet jako początkujący uważam, że dopasowanie wzoru jest idiomatyczne. –

Powiązane problemy