Elixir

2015-12-03 23 views
17

'de bir dizenin boş olup olmadığını nasıl kontrol edebilirim Boşsa veya yalnızca boşlukları içeriyorsa boş bir dizilim boş demektir. Örneğin, "", " " ve "\n" boştur.Elixir

Raylarda, .blank? yöntemine sahibiz.

Elixir'de (veya Phoenix Framework'de) benzer bir şey var mı?

cevap

12

3 örneğinizi "" ile karşılaştırabileceğiniz String.strip/1 vardır.

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

https://github.com/elixir-lang/elixir/pull/2707

+1

Ya bir muhafızın içinde yapmak istersam? – nicooga

+0

şeridi, Elixir> 1.3.0'da yumuşak kullanımdan kaldırıldı.https://github.com/elixir-lang/elixir/releases/tag/v1.3.0 – stevendaniels

+3

@nicooga eğer sadece güvenlik görevlilerinin içindeki boş dizeleri kontrol etmek istiyorsanız, binary_part (string, 1, -) iken 1) –

3

Herhangi bir veri türü için bunu düzgün yapmak için küçük bir kitaplık yayınladım. Elixir'deki Rails 'blank? yöntemi ile mümkün olduğunca aynı davranışı uygular.

Kütüphanesi buradadır: https://github.com/samphilipd/blankable

yüklemek mix.exs içinde bağımlılıkları listenize blankable eklemek için:

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

neden sadece

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

veya daha iyi eşleşen kalıp kullanın henüz byte boyutunu kontrol edin

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

Sadece Elixir'i öğrenmeye başladım, ama yeni başlayan biri olarak bile desen eşlemesini deyimsel olarak buluyorum. –