如何否定管道中的布尔值?

Ono*_*cci 9 elixir

请考虑以下代码:

defmodule T do
  def does_not_contain?(s, t) do
    s |> not(String.contains?(t))
  end
end
Run Code Online (Sandbox Code Playgroud)

这会在编译时出现以下错误:

** (CompileError) iex:3: undefined function not/2
Run Code Online (Sandbox Code Playgroud)

我也试过这样的结构:

defmodule T do
  def does_not_contain?(s, t) do
    s |> String.contains?(t) |> not
  end
end
Run Code Online (Sandbox Code Playgroud)

这给了我这个错误:

** (SyntaxError) iex:4: unexpected token: end
Run Code Online (Sandbox Code Playgroud)

我可以做这样的工作:

defmodule T do
  def does_not_contain?(s, t) do
    does_contain = s |> String.contains?(t)
    not(does_contain)
  end
end
Run Code Online (Sandbox Code Playgroud)

但尝试将整个事情保持在管道中是非常有吸引力的.有没有办法在管道中否定一个布尔值?

Gaz*_*ler 19

如果您使用该函数的完全限定版本,则可以在管道中使用它:

iex(1)> true |> Kernel.!
false
iex(2)> true |> Kernel.not
false
Run Code Online (Sandbox Code Playgroud)