在Kotlin函数调用中,参数名与变量名同名是否可行?
Kotlin中同名变量作为命名参数调用函数的可行性与解析逻辑
完全允许这种写法,这是Kotlin支持的合法语法。不过你提供的示例代码存在两处小问题,修正后的正确代码如下:
fun fun1(to: String) { // 函数体 } fun fun2() { val to = "xyz" // 需要显式声明局部变量to fun1(to = to) }
编译器的解析逻辑
在fun1(to = to)这个调用中,编译器会清晰区分两个to的含义:
- 等号左侧的
to是fun1函数的形参名称,属于命名参数语法的一部分,作用是明确指定要给哪个形参赋值; - 等号右侧的
to是当前作用域(fun2函数内部)的局部变量,作为实参传递给fun1的形参。
Kotlin的作用域解析规则会优先识别当前作用域内的变量,而命名参数的参数名属于函数调用的语法标记,二者不会产生混淆,编译器能准确完成绑定。
额外说明
如果变量名和形参名完全一致,其实可以省略命名参数,直接写成fun1(to),效果和fun1(to = to)完全相同,代码更简洁。但在多参数场景下,即使同名,保留命名参数写法也能提升代码可读性,明确每个实参对应的形参。
内容的提问来源于stack exchange,提问作者Tushar Singla
相关产品推荐
相关产品推荐

