能否在单个Solidity getter函数中返回多个数组?
Solidity函数能否返回多个数组?
这个问题出现两种完全相反的答案,核心原因是Solidity版本迭代带来的语法变化:
旧版本限制(Solidity 0.4.x及更早)
在早期的Solidity版本中,确实无法在单个函数里直接返回多个动态数组,当时的编译器对返回值的处理有严格限制,只能返回单个数组,或者多个非数组类型的值。那个认为“不可实现”的答案,就是基于这个时期的版本规则。
新版本支持(Solidity 0.5.x及之后)
随着Solidity版本更新,从0.5.0开始,编译器放宽了返回值的限制,现在已经可以在单个函数中返回多个数组(包括动态数组和固定长度数组)。
举个实际的代码示例:
pragma solidity ^0.8.0; contract MultiArrayReturn { function returnTwoArrays() public pure returns (uint[] memory, string[] memory) { // 初始化第一个uint类型动态数组 uint[] memory numArray = new uint[](3); numArray[0] = 10; numArray[1] = 20; numArray[2] = 30; // 初始化第二个string类型动态数组 string[] memory strArray = new string[](2); strArray[0] = "foo"; strArray[1] = "bar"; // 返回两个数组 return (numArray, strArray); } }
现在在Solidity 0.8.x的主流版本中,这种写法完全合法,编译和调用都不会有问题。
内容的提问来源于stack exchange,提问作者WHOATEMYNOODLES
相关产品推荐
相关产品推荐

