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

如何在定义struct的.exs文件中正确使用struct?

解决Elixir脚本中定义并使用Struct的报错问题

问题原因

在.exs脚本文件的顶层直接使用%Person{}这类Struct语法糖时,会触发"cannot access struct Person"报错。这是因为脚本顶层代码按顺序执行时,模块刚完成定义,%StructName{}语法所需的上下文还未完全就绪。

两种可行的解决方法

方法1:将实例化代码封装到模块函数中

把创建Struct实例的逻辑放到模块内部的函数里,通过调用函数获取实例:

defmodule Person do
  defstruct name: "", age: 0, stage: :baby

  def create_bob do
    %Person{name: "Bob"}
  end
end

# 调用模块函数获取实例
IO.inspect(Person.create_bob())

方法2:使用struct/2函数创建实例

用Elixir内置的Kernel.struct/2函数替代%Person{}语法,该函数会明确查找模块的Struct定义:

defmodule Person do
  defstruct name: "", age: 0, stage: :baby
end

# 使用struct/2创建实例
bob = struct(Person, name: "Bob")
IO.inspect(bob)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 03:44:55