elixir - 如何将私有(private)函数抽象到实用程序库中?

标签 elixir

假设我有一堆如下代码:

def dirs(path, regex_dir \\ ".+") do
  path
  |> normalize_path
  |> do_dirs([], regex_dir)
end

# list of bitstrings
defp normalize_path([path | rest]) when is_bitstring(path) do
  [path | normalize_path(rest)]
end

# list of character lists
defp normalize_path([path | rest]) when is_list(path) do
  [to_string(path) | normalize_path(rest)]
end

defp normalize_path([]) do
  []
end

# bitstring
defp normalize_path(path) when is_bitstring(path) do
  [path]
end

# character list
defp normalize_path(path) when is_list(path) do
  [to_string(path)]
end

我想在代码的另一部分使用 normalize_path,将 normalize_path 函数抽象到实用程序模块或库中的最佳方法是什么?我仍然想保持该功能仅供内部使用,不能作为公共(public)功能使用。

最佳答案

最好的办法可能是将这些函数抽象到一个单独的模块中,然后使用 @moduledoc false 将其隐藏在文档中。这些函数不会是私有(private)的,您的库的用户仍然可以访问它们,但如果不记录它们,您就将它们标记为不是库 API 的一部分。

defmodule Helpers do
  @moduledoc false

  @doc """
  You can still provide per-function docs for documenting how the code works;
  these docs won't be public anyways since `@moduledoc false` hides them.
  """
  def helper(...), do: ...
end

关于elixir - 如何将私有(private)函数抽象到实用程序库中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28466187/

相关文章:

elixir - 如何键入转换解码JSON,就好像它来自数据库一样

Elixir - 将列表转换为 map

dictionary - Elixir 将结构转换为映射

elixir - float 范围

Elixir:更新 map 列表中的特定值

elixir - iex.iexs 文件未在测试环境中加载

Elixir:防止论证错误

dependencies - Elixir - 如何动态获取项目中使用的库版本?

ubuntu - 无法运行 Phoenix 服务器。找不到 erlang/lib/parsetools-2.1.8

elixir - 找不到任务 "docs"。您的意思是 "do"吗?