2016-03-24 17 views
5

Xét đoạn mã sau:Làm thế nào để phủ nhận một Boolean trong một đường ống?

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

này cung cấp cho các lỗi sau đây về biên soạn:

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

Tôi cũng đã cố gắng một cấu trúc như thế này:

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

Đó mang lại cho tôi lỗi này:

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

tôi có thể làm một cái gì đó như thế này mà hoạt động:

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

Nhưng nó khá hấp dẫn để cố gắng giữ toàn bộ điều trong các đường ống. Có cách nào để phủ nhận một boolean trong đường ống?

Trả lời

13

Nếu bạn sử dụng phiên bản đầy đủ của hàm sau đó bạn có thể sử dụng nó trong một đường ống dẫn:

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

Cảm ơn! Đó chính xác là những gì tôi đang tìm kiếm! –

Các vấn đề liên quan