Solidity函数返回类型string[] memory为何无法返回固定长度string[5]数组
类型不兼容的原因
Solidity语言中,固定长度数组和动态长度数组属于完全独立的两种类型,二者不存在默认隐式转换规则。
你代码中直接使用的数组字面量["DocumentTemplate", "Definition", "RepAndWarranty", "Restriction", "Entitlement"],会被编译器默认推导为固定长度数组类型string[5] memory,和你函数声明的返回值类型string[] memory(动态长度字符串数组)不匹配,因此触发类型转换报错。
可行解决方法
你可以手动初始化对应长度的动态数组,再逐个赋值元素即可,修改后的代码如下:
function BindingTypeList() public pure returns(string[] memory) { // 显式初始化长度为5的动态字符串数组 string[] memory result = new string[](5); result[0] = "DocumentTemplate"; result[1] = "Definition"; result[2] = "RepAndWarranty"; result[3] = "Restriction"; result[4] = "Entitlement"; return result; }
上述代码完全符合Solidity类型规则,可以正常编译运行。
内容的提问来源于stack exchange,提问作者GGizmos
相关产品推荐
相关产品推荐

