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

Elixir模块调用:erlang.trace_pattern/2的正确MFA语法是什么?

正确调用:erlang.trace_pattern/2追踪Elixir String.contains?/2的写法

你的问题核心在于MFA格式中函数名的类型错误:Erlang的trace_pattern/2要求MFA(Module-Function-Arity)里的函数名必须是原子(atom),而非字符串或字符列表。

正确调用方式

直接使用原子形式的函数名,模块名可以用Elixir原生的String(会自动转换为Erlang原子:"Elixir.String"):

:erlang.trace_pattern({String, :'contains?', 2}, [])

或者显式写出Erlang风格的模块原子:

:erlang.trace_pattern({:"Elixir.String", :'contains?', 2}, [])

为什么之前的写法失败

  • 第一次尝试用了字符串"contains?":Erlang不接受字符串作为MFA中的函数名参数,必须是原子类型,因此触发无效MFA规范的错误。
  • 第二次尝试用了:string模块:Elixir的String模块在Erlang虚拟机中对应的原子是:"Elixir.String",小写的:string是Erlang内置的独立模块,和Elixir的String完全无关,所以同样报错。

验证方式(可选)

在iex中可以直接确认模块和函数的原子形式:

iex> # 查看Elixir模块对应的Erlang原子
iex> Atom.to_string(String)
"Elixir.String"

iex> # 确认函数名是原子类型
iex> is_atom(:'contains?')
true

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 09:50:24