在 Elixir 中,我将如何为函数创建新的保护子句?显然,我已经看到你不能只调用 a 中的任何函数when
声明,但如果能够做这样的事情那就太好了:
defmodule Player do
def play_card(player), do: []
def play_card(player) when has_cards(player), do: ...
# Define has_cards as guard clause?
end
简短的回答是:你不能。
长的答案是,您可以定义宏,只要它们由有效的守卫表达式组成,它们就可以在守卫中工作。但这对于复杂的守卫来说并不是微不足道的,因此最好避免它,除非你真的必须这样做。
有效的守卫列表可以在入门指南中找到:http://elixir-lang.org/getting-started/case-cond-and-if.html#expressions-in-guard-clauses http://elixir-lang.org/getting-started/case-cond-and-if.html#expressions-in-guard-clauses
“复杂”保护宏的示例实现可以在 Elixir 源代码中找到:https://github.com/elixir-lang/elixir/blob/5d34fcdccd20bf38c4f2a13f8adeb78e22b4e74c/lib/elixir/lib/kernel.ex#L1574 https://github.com/elixir-lang/elixir/blob/5d34fcdccd20bf38c4f2a13f8adeb78e22b4e74c/lib/elixir/lib/kernel.ex#L1574
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)