2016-05-06 50 views
1

我正在學習Elixir,我決定給自己的練習之一是嘗試編寫Luhn algorithm用於在慣用Elixir中進行信用卡驗證。Elixir中的等號運算符是否有前綴/波蘭語符號?

我意識到Elixir中的==是一個內核函數,它顯然是由編譯器內聯的。是否有某種效用函數可以讓我做這樣的事情?

... 
|> == 0 

而不是必須定義一個函數來管道,就像我在這裏所做的那樣。

藥劑

defmodule Luhn do 
    def equalzero?(x) x == 0 end 
    def validate(num) do 
    digits = Integer.digits(num) 
    len = length digits 

    digits 
    |> Stream.with_index 
    |> Enum.reverse 
    |> Enum.reduce(0, fn {digit, index}, acc -> 
     if rem(len - index, 2) == 0 do 
     acc + digit * 2 |> Integer.digits |> Enum.sum 
     else 
     acc + digit 
     end 
    end) 
    |> rem(10) 
    |> Luhn.equalzero? 
    end 
end 

回答

3

可以通過管道到這樣的運營商通過參照其全部的路徑(其在Kernel定義),Kernel.==

iex(1)> 0 |> Kernel.==(0) 
true 
iex(2)> 1 |> Kernel.==(0) 
false