Elixir语言中 Kernel.defguard
相关用法介绍如下。
用法:
defguard(guard)
(从 1.6.0 开始)
(宏)
@spec defguard(Macro.t()) :: Macro.t()
生成一个适用于保护表达式的宏。
如果定义使用了守卫中不允许的表达式,它会在编译时引发,否则会创建一个可以在守卫内部或外部使用的宏。
请注意,Elixir 中的约定是使用 is_
前缀命名守卫中允许的函数/宏,例如
。但是,如果函数/宏返回布尔值并且不允许在守卫中使用,则它应该没有前缀并以问号结尾,例如 is_list/1
。Keyword.keyword?/1
示例
defmodule Integer.Guards do
defguard is_even(value) when is_integer(value) and rem(value, 2) == 0
end
defmodule Collatz do
@moduledoc "Tools for working with the Collatz sequence."
import Integer.Guards
@doc "Determines the number of steps `n` takes to reach `1`."
# If this function never converges, please let me know what `n` you used.
def converge(n) when n > 0, do: step(n, 0)
defp step(1, step_count) do
step_count
end
defp step(n, step_count) when is_even(n) do
step(div(n, 2), step_count + 1)
end
defp step(n, step_count) do
step(3 * n + 1, step_count + 1)
end
end
相关用法
- Elixir Kernel.defexception用法及代码示例
- Elixir Kernel.defmodule用法及代码示例
- Elixir Kernel.defmacro用法及代码示例
- Elixir Kernel.defdelegate用法及代码示例
- Elixir Kernel.defoverridable用法及代码示例
- Elixir Kernel.defstruct用法及代码示例
- Elixir Kernel.defp用法及代码示例
- Elixir Kernel.def用法及代码示例
- Elixir Kernel.destructure用法及代码示例
- Elixir Kernel.div用法及代码示例
- Elixir Kernel.SpecialForms.case用法及代码示例
- Elixir Kernel.round用法及代码示例
- Elixir Kernel.left / right用法及代码示例
- Elixir Kernel.put_in用法及代码示例
- Elixir Kernel.tl用法及代码示例
- Elixir Kernel.left - right用法及代码示例
- Elixir Kernel.tuple_size用法及代码示例
- Elixir Kernel.to_charlist用法及代码示例
- Elixir Kernel.base ** exponent用法及代码示例
- Elixir Kernel.left !== right用法及代码示例
- Elixir Kernel.if用法及代码示例
- Elixir Kernel.spawn_monitor用法及代码示例
- Elixir Kernel.to_string用法及代码示例
- Elixir Kernel.length用法及代码示例
- Elixir Kernel.first..last用法及代码示例
注:本文由纯净天空筛选整理自elixir-lang.org大神的英文原创作品 Kernel.defguard(guard)。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。