2015-12-03 110 views

回答

12

String.strip/1它将您的3个例子转换为"",你可以比较。

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

如果我想在警卫内部做到这一点,该怎么办?在Elixir> 1.3.0中, – nicooga

+0

strip已经被软化了。 https://github.com/elixir-lang/elixir/releases/tag/v1.3.0 – stevendaniels

+3

@nicooga如果你只是想检查里面的空字符串,试试: 'when binary_part(string,1, - 1)' –

3

我发布了一个小型库,可以针对任何数据类型正确执行此操作。它尽可能实现与Elixir中的Rails'blank?方法相同的行为。

库是在这里:https://github.com/samphilipd/blankable

要安装,添加blankable到你的依赖列表中mix.exs:

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

为什么不直接使用模式匹配

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

或更好但检查其字节大小

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

我只是刚开始学习药剂,但即使作为新手,我发现模式匹配是惯用的方式。 –

相关问题