微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

调用`std.math.clamp`会产生编译错误`error:无法评估Zig中的常量表达式`

如何解决调用`std.math.clamp`会产生编译错误`error:无法评估Zig中的常量表达式`

为什么该程序无法编译? Zig版本0.6.0。

const std = @import("std");
fn get_value () f32 {
    return 1.0;
}
test "testcase" {
    const value: f32 = 1. + get_value() ;
    _ = std.math.clamp(value,0.0,255.0);
}

给出编译错误

$ zig test src/clamp.zig       
Semantic Analysis [790/1017] ./src/clamp.zig:9:24: error: unable to evaluate constant expression
    _ = std.math.clamp(value,255.0);
                       ^
./src/clamp.zig:9:23: note: referenced here
    _ = std.math.clamp(value,255.0);
                      ^

解决方法

原因是value与常量0.0255.0的类型不同。 valuef32,常量的类型是comptime_float

解决方法是将常量转换为f32

_ = std.math.clamp(value,@as(f32,0.0),255.0));

钳位类型似乎要求所有参数要么都是comptime值,要么全部是运行时值。

请参见https://ziglearn.org/chapter-1/#comptime

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。