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

将数组拼接改为Ada 2022归约表达式时触发Range check failed错误,求排查

问题原因

你遇到的range check failed错误,根源在于归约表达式的初始值[]类型推断错误。编译器默认将[]推断为与迭代元素相同的类型(即Bytes_4,固定长度4的Bytes子类型),但Bytes_4要求必须包含4个元素,空数组[]完全不符合这个约束,后续拼接时就会触发范围检查异常。

解决方案

明确指定归约的初始值为Bytes类型的空数组,而非依赖编译器自动推断。将函数B中的初始值[]替换为Bytes'Empty即可:

function B (W : Words) return Bytes is
  ([for X of W => Convert(X)]'Reduce ("&", Bytes'Empty));
验证说明
  • Bytes'Empty是Bytes类型的合法空数组,其下标范围为1..0(符合Positive下标类型的空数组规则)。
  • 归约过程中,每次将当前的Bytes结果与Bytes_4(Convert(X)的返回值)拼接,最终生成的数组长度正确(3*4=12个元素),完全符合Bytes的动态数组约束。

修改后重新编译运行,就能得到和函数A一致的结果,不会再触发范围检查错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 20:37:14