2016-03-24 11 views
5

Si consideri il seguente codice:Come negare un booleano in una pipeline?

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

Questo ha pronunciato la seguente errore di compilazione:

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

Ho provato anche un costrutto come questo:

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

che mi dà questo errore:

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

posso fare qualcosa di simile che funziona:

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

ma è abbastanza attraente per cercare di mantenere il tutto in cantiere. C'è un modo per negare un booleano all'interno della pipeline?

risposta

13

Se si utilizza la versione completo della funzione, è possibile utilizzare in una pipeline:

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

Grazie! Questo è esattamente quello che stavo cercando! –

Problemi correlati