2016-03-24 12 views
5

Rozważmy następujący kod:Jak negować Boolean w potoku?

defmodule T do 
    def does_not_contain?(s, t) do 
    s |> not(String.contains?(t)) 
    end 
end 

To daje następujący błąd na kompilacji:

** (CompileError) iex:3: undefined function not/2 

Próbowałem też konstrukt takiego:

defmodule T do 
    def does_not_contain?(s, t) do 
    s |> String.contains?(t) |> not 
    end 
end 

To daje mi ten błąd:

** (SyntaxError) iex:4: unexpected token: end 

mogę zrobić coś takiego, który działa:

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

Ale to całkiem atrakcyjne, aby utrzymać całą sprawę w rurociągu. Czy istnieje sposób na zanegowanie wartości boolowskiej w ramach potoku?

Odpowiedz

13

Jeśli używasz pełną wersję funkcji można użyć go w rurociągu:

iex(1)> true |> Kernel.! 
false 
iex(2)> true |> Kernel.not 
false 
+1

Dzięki! Właśnie tego szukałem! –