Chapel中能否将数组用作配置常量?
解决Chapel配置文件中起始位置数组的类型不匹配问题
嘿,我来帮你搞定这个Chapel的配置问题!咱先拆解下为啥会触发那个类型不匹配的错误:
你在代码里写的var DOG_STARTING_POSITION: [1..0] int;是一个空的一维数组(因为范围1..0是无效的,没有元素),而.cfg文件里的[25,25]会被Chapel的配置系统当成字符串处理,它没法自动把这个字符串转换成你定义的空数组类型,所以就报错说“从字符串赋值到int(64)类型不匹配”了。
接下来给你两种靠谱的解决办法:
方法1:声明固定大小的数组
如果你确定起始位置是二维坐标(两个整数),可以直接声明一个长度为2的数组:
var DOG_STARTING_POSITION: [1..2] int;
配置文件里的写法不用改,还是:
DOG_STARTING_POSITION=[25,25]
Chapel会正确解析这个数组字面量,把两个整数赋值给你声明的变量。
方法2:使用动态数组(更灵活)
如果以后可能需要支持三维坐标(三个整数)或者其他长度的位置,可以用动态数组声明:
var DOG_STARTING_POSITION: [] int;
配置文件的写法依然保持不变,Chapel会根据你配置的数组元素数量自动调整数组大小,完全适配你的需求。
两种方法都能解决这个类型不匹配的问题,你可以根据自己的实际场景选最合适的那种~
内容的提问来源于stack exchange,提问作者Brian Dolan
相关产品推荐
相关产品推荐

