Elixir 中的相等运算符是否有 prefix/Polish 表示法?
Is there a prefix/Polish notation for the equality operator in Elixir?
我正在学习 Elixir,我决定给自己做的练习之一是尝试用惯用的 Elixir 编写 Luhn algorithm 用于信用卡验证。
我意识到 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
您可以通过引用它们的完整路径 Kernel.==
:
来导入此类运算符(在 Kernel
中定义)
iex(1)> 0 |> Kernel.==(0)
true
iex(2)> 1 |> Kernel.==(0)
false
我正在学习 Elixir,我决定给自己做的练习之一是尝试用惯用的 Elixir 编写 Luhn algorithm 用于信用卡验证。
我意识到 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
您可以通过引用它们的完整路径 Kernel.==
:
Kernel
中定义)
iex(1)> 0 |> Kernel.==(0)
true
iex(2)> 1 |> Kernel.==(0)
false