2016-05-06 3 views
1

Ich lerne Elixir, und eine der Übungen, die ich mir selbst geben möchte, ist zu versuchen, die Luhn algorithm für die Kreditkartenvalidierung in idiomatischen Elixir schreiben.Gibt es in Elixir eine Vorsilbe/polnische Schreibweise für den Gleichheitsoperator?

Ich realisiere, dass == in Elixir ist eine Kernel-Funktion, die offenbar durch den Compiler inlined sind. Gibt es eine Art Utility-Funktion, mit der ich so etwas machen kann?

... 
|> == 0 

statt mit einer Funktion zum Rohr in definieren, wie ich hier getan habe.

Elixir

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 

Antwort

3

Sie können über die Pipeline in solche Operatoren (die in Kernel definiert sind) durch, um ihre vollständigen Pfad Bezug, Kernel.==:

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