0

为什么这个程序编译失败?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, 0.0, 255.0);
                       ^
./src/clamp.zig:9:23: note: referenced here
    _ = std.math.clamp(value, 0.0, 255.0);
                      ^
4

1 回答 1

1

原因是它value的类型与常量0.0和不同255.0valuef32,常量的类型是comptime_float

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

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

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

https://ziglearn.org/chapter-1/#comptime

于 2020-09-27T06:58:13.987 回答