中缀符号和(…)不能正常工作
考虑以下情况:我有一个类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
左侧不再有对象标记,因此中缀表示法的特殊语法不再有效。 你必须回到常规函数表示法。
这个限制对解析器解析代码而不与其他语法冲突是必要的。