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

Odin语言结构体比较报错:'a == b'非常量布尔值问题

Odin中结构体比较的#assert报错问题

你的代码如下:

Foo :: struct {
    x: int,
    y: int,
}

a := Foo{1, 1}
b := Foo{1, 1}

#assert(a == b)

你提到Odin官方文档说明「若结构体的所有字段均可比较,则结构体值可比较」,但运行代码时收到报错:Error: 'a == b' is not a constant boolean,问题出在**#assert的特性**上:

  • #assert是编译期断言,它要求传入的表达式必须是编译期就能确定结果的常量布尔值。
  • 你代码里的a和b是运行时变量,哪怕它们的字段值看起来固定,它们的比较结果也不属于编译期常量范畴,所以#assert会报错。
  • 文档里说的结构体可比较,指的是运行时可以用==运算符比较,这和编译期断言的要求不冲突。

解决方法分两种场景:

  1. 若需要编译期断言:
    把a和b声明为编译期常量,使用constant关键字:

    Foo :: struct {
        x: int,
        y: int,
    }
    
    constant a := Foo{1, 1}
    constant b := Foo{1, 1}
    
    #assert(a == b)
    
  2. 若只是运行时检查:
    改用不带#的assert,它用于运行时的断言验证:

    Foo :: struct {
        x: int,
        y: int,
    }
    
    a := Foo{1, 1}
    b := Foo{1, 1}
    
    assert(a == b)
    

内容的提问来源于stack exchange,提问作者Slava.In

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 10:42:03