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
相关产品推荐
相关产品推荐

