我正在阅读Elixir的命名约定。它指出:
不能在防护中使用的谓词函数的名称应带有尾部问号(?),而不是is_(或类似名称)前缀。
因此,哪些功能不能用于防护?
这三个函数都包含在警卫中有效的表达式;只是必须将自定义防护写成宏,而不是普通函数:
defmodule User do
defstruct age: 0
defmacro kid?(age) do
quote do
6 < unquote(age) and unquote(age) < 12
end
end
defmacro teen?(age) do
quote do
12 < unquote(age) and unquote(age) < 18
end
end
defmacro elder?(age) do
quote do
60 < unquote(age)
end
end
end
defmodule Greeting do
import User
def greet(%{age: age}) when kid?(age), do: "Hiya"
def greet(%{age: age}) when teen?(age), do: "Whatever"
def greet(%{age: age}) when elder?(age), do: "You kids get off my lawn"
def greet(_), do: "Hello"
end
for age <- [0, 5, 10, 15, 20, 90] do
IO.inspect {age, Greeting.greet(%{age: age})}
end
Run Code Online (Sandbox Code Playgroud)
输出:
{0, "Hello"}
{5, "Hello"}
{10, "Hiya"}
{15, "Whatever"}
{20, "Hello"}
{90, "You kids get off my lawn"}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
979 次 |
| 最近记录: |