中缀函数 是一种可以以中缀形式调用的函数(没有点和括号),这提高了代码的可读性。这些函数方便用于创建DSL(领域特定语言)。
infix 修饰符声明。示例:
infix fun Int.add(x: Int): Int = this + x val result = 5 add 10 // 15
能否对多个参数或具有默认参数的参数使用中缀函数?
答案: 不能使用。中缀函数只能有一个没有默认值和 vararg 的必需参数。
错误声明示例:
// 错误! infix fun foo(a: Int, b: Int) { }
故事
在项目中,试图引入中缀函数来用更易读的中缀表达式替代 builder 函数的调用。由于不清楚参数数量的限制,函数声明时用了两个参数——学生们长时间无法理解为什么编译不通过。
故事
开发人员在一个大的算术表达式中使用了中缀表达式而没有括号,以为运算的优先级与传统数学运算符相同。结果,表达式的计算与预期不一致——不得不重新用显式括号重写。
故事
在集合内部通过中缀实现了解析("item to value"),并在内部使用了嵌套,但由于对语法的误解,两个嵌套的中缀调用未能成功——只有在顶层设置对的工作,而嵌套的对被忽略,导致了重要数据的丢失。