什么是可能引发的函数的typespec声明?

Nat*_*ong 4 elixir

使用Elixir的typespecs,我如何记录@spec函数可能引发异常而不是返回值?

Nat*_*ong 13

使用 no_return

no_return(在Typespecs文档中列出)应该用于记录函数何时引发.

例如:

@spec get_env!(var_name :: String.t()) :: String.t() | no_return
def get_env!(var_name) do
  System.get_env(var_name) || raise "#{var_name} is not set!"
end
Run Code Online (Sandbox Code Playgroud)

例如,这就是File.copy!/2使用.

  • @mudasobwa 我写了这个问题和答案。你链接的 Erlang 页面和我在问题中链接的 Elixir typespec 文档页面都没有提到“raise”或“raise”这个词,所以在关于这种情况的网络搜索中都没有出现。我通过查看我链接的 Elixir `File` 模块源找到了答案。鉴于您已经知道,您可以在文档中找到此问题的答案这一事实并不意味着以搜索用户可以找到的方式记录此问题没有用(尽管我稍后可能会对 Elixir 进行 PR文档以在那里明确说明)。 (2认同)
  • Elixir 删除了规范中的所有“no_return()”。所以我认为这个答案需要更新。请参阅 https://github.com/elixir-lang/elixir/pull/8092 (2认同)