Kotlin中如何在函数调用时将参数x1的值赋给参数x2
问题原因
Kotlin 不支持在同一次函数调用的参数列表中,直接引用前面传入的命名参数值。代码B里写x2 = x1时,当前作用域不存在名为x1的独立变量,编译器会直接抛出未解析引用的错误。
另外代码B还存在运算优先级的隐藏问题:step * index.toX会优先执行index.toX再做乘法,和代码A中先算step * index再调用.toX的逻辑完全不一致,就算解决了参数引用问题,最终绘制效果也会不符合预期。
修复方案
最推荐的写法是把公共计算结果提取为局部变量,既解决参数复用问题,也能保证运算顺序正确,代码可读性和可维护性更好:
val drawX = (step * index).toX it.drawChildnAxis( x1 = drawX, y1 = 0f.toY, x2 = drawX, y2 = yAxisLength.toY )
如果不想额外定义局部变量,也可以直接把相同的计算表达式分别传给x1和x2,注意必须给乘法运算加括号保证优先级正确:
it.drawChildnAxis( x1 = (step * index).toX, y1 = 0f.toY, x2 = (step * index).toX, y2 = yAxisLength.toY )
这种写法不建议使用,后续如果要修改x坐标的计算逻辑,很容易出现只改了一处、漏改另一处的问题。
内容的提问来源于stack exchange,提问作者HelloCW
相关产品推荐
相关产品推荐

