Solidity中如何从返回多变量的函数中仅提取所需值
Solidity多返回值指定变量提取方案
你不需要先接收全部7个变量,Solidity原生支持在多返回值解构时用空白占位符跳过不需要的返回值,既可以避免未使用变量警告,还能降低不必要的gas消耗。
首先修正原代码的两处笔误:
- Solidity无符号整数类型关键字为
uint,你代码中接口定义、变量声明里写的unit会导致编译失败,需要先替换修正 - 函数内声明string类型变量时需要显式标注数据位置为
memory
具体实现
你需要的d5是getData()函数的第5个返回值,解构赋值时前4个返回值留空占位,第5位声明你需要的d5变量,最后2个返回值也留空即可,修正后的doSomething函数代码如下:
function doSomething() external { // 顺序对应返回值位置,不需要的返回值直接留空跳过 (, , , , string memory d5, , ) = keepData.getData(); // 后续直接使用d5即可,无未使用变量警告 }
扩展说明
- 占位的逗号不能省略,必须严格对应返回值的顺序和数量,空位置对应你不需要接收的返回值
- 如果你后续需要提取多个非连续返回值,同样可以用该方式实现,比如需要提取第一个返回值
d1和最后一个返回值d7,写法如下:
(uint d1, , , , , , address d7) = keepData.getData();
- 该写法相比接收全部返回值的写法,节省了多余变量的声明、存储成本,gas开销更低
内容的提问来源于stack exchange,提问作者laitmiro
相关产品推荐
相关产品推荐

