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会报错。 - 文档里说的结构体可比较,指的是运行时可以用
==运算符比较,这和编译期断言的要求不冲突。
解决方法分两种场景:
若需要编译期断言:
把a和b声明为编译期常量,使用constant关键字:Foo :: struct { x: int, y: int, } constant a := Foo{1, 1} constant b := Foo{1, 1} #assert(a == b)若只是运行时检查:
改用不带#的assert,它用于运行时的断言验证:Foo :: struct { x: int, y: int, } a := Foo{1, 1} b := Foo{1, 1} assert(a == b)
内容的提问来源于stack exchange,提问作者Slava.In
相关产品推荐
相关产品推荐

