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

如何在Elixir中正确断言结构体类型?有无更优雅写法?

更优雅的Elixir结构体类型断言方式

当然有更优雅的实现方式啦!Elixir其实内置了专门用于结构体类型检查的函数,比直接比较__struct__字段更规范、也更符合惯用写法。

你可以用is_struct/2函数来断言某个值是否是指定结构体的实例,用法非常简单:

assert is_struct(foo, Foo)

这个函数的好处在于:

  • 它会先检查foo本身是不是结构体类型(避免了如果foo不是结构体时,直接访问__struct__字段会抛出错误的问题)
  • 写法更简洁直观,一眼就能看出你在做结构体类型断言

至于你提到的assert type(foo) == %Foo{}这种写法,其实是行不通的——因为Elixir里的type/1函数对于结构体返回的是:map(毕竟结构体本质上是带有特殊__struct__字段的map),所以这种比较永远不会成立。

另外,如果只是想断言某个值是任意结构体(不限制具体类型),可以用单参数的is_struct/1:

assert is_struct(foo)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:01:39