如何在定义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
相关产品推荐
相关产品推荐

