You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Elixir 1.6中__info__/1的:exports参数替代方案咨询

如何在Elixir 1.6+中替代已移除的__info__(:exports)

我完全理解你的困惑——Elixir 1.6确实悄无声息地移除了__info__/1的:exports参数,而且更新日志里没专门提这个细节,踩坑的时候确实头疼。不过别担心,我们有两种可靠的方式来实现原来的功能:

针对Elixir 1.6版本

在1.6里,:exports本质上是模块导出的函数和宏的合集,所以我们可以通过合并这两类内容来替代:

defmodule ExportUtils do
  def get_exports(module) do
    # 合并函数和宏列表,去重避免潜在重复(虽然一般不会有)
    module.__info__(:functions) ++ module.__info__(:macros)
    |> Enum.uniq()
  end
end

# 调用示例
ExportUtils.get_exports(Enum)

这段代码会返回和你之前用module.__info__(:exports)完全一样的{函数名, 元数}元组列表。

针对Elixir 1.7及以上版本

从1.7开始,官方贴心地提供了Module.exports/1函数,直接调用就能一步到位:

Module.exports(Enum)

这个函数的返回结果和旧版__info__(:exports)完全一致,是官方推荐的替代方案。

补充说明

Elixir团队移除:exports参数的原因,大概率是为了让模块信息的获取更精细化——把导出内容拆分为函数和宏两类,让API的语义更明确,同时鼓励开发者根据实际需求选择获取对应类型的内容。

内容的提问来源于stack exchange,提问作者Tyler

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 08:13:14