中缀符号和(…)不能正常工作

考虑以下情况:我有一个类Test

class Test() { infix fun say(msg: String) = println(msg) } 

和一个主要方法

 fun main(args: Array<String>) { val test = Test() test say "Hello World!" //Works with(test) { say "Goodbye World!" //Does not work say("Hello again!") //Works } } 

正如你所看到的,我正在测试中缀符号。 考虑with(...)允许你使用在with块中作为参数传递的对象而不必通过点符号访问它的成员,我期望中缀表示法像我在上面的示例中显示的那样工作。

不幸的是,这是行不通的,有没有原因,这是行不通的? 这是一个错误还是一个限制? 或者,也许我不正确解释with(...)功能?

中缀符号是关于它使用方式的语法。 它适用于左侧的对象和右侧的参数。

with您一起使用时with左侧不再有对象标记,因此中缀表示法的特殊语法不再有效。 你必须回到常规函数表示法。

这个限制对解析器解析代码而不与其他语法冲突是必要的。