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

Solidity函数声明返回值未写return却可运行?UniswapV2Router代码解惑

关于UniswapV2Router中swapExactETHForTokens函数的疑问解答

1. 为什么看不到amounts的显式声明?

这是Solidity的语法特性:在函数的returns部分声明的变量,会自动成为函数内的局部变量,不需要再单独用uint[] memory amounts;声明。你看函数签名里的returns (uint[] memory amounts),这行代码已经完成了amounts的声明和内存分配,直接就能在函数体内赋值使用。

2. 为什么没有return语句却能返回值?

从Solidity 0.4.22版本开始,支持命名返回参数的自动返回。只要你在函数体内给命名的返回变量(这里就是amounts)完成了赋值(代码里amounts = UniswapV2Library.getAmountsOut(factory, msg.value, path);已经完成赋值),当函数执行完毕时,会自动返回这个变量的当前值,不需要手动写return amounts;。

补充个细节:代码里_swap函数负责实际执行兑换操作,但amounts存储的是getAmountsOut计算出的预期输出数量数组,最终返回的就是这个预估值——UniswapV2的交易基于恒定乘积公式执行,预估值和实际兑换结果是匹配的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 14:45:23