方法调用语法

对于面向对象的编程,可以用 obj.methodName(args) 语法,取代 methodName(obj, args) 。 如果没有多余的参数,则可以省略括号: obj.len (取代 len(obj) )。

此方法调用语法不限于对象,可用于为过程提供任意类型的第一个参数:

  1. echo "abc".len # 等同于 echo len "abc"
  2. echo "abc".toUpper()
  3. echo {'a', 'b', 'c'}.card
  4. stdout.writeLine("Hallo") # 等同于 writeLine(stdout, "Hallo")

另一种看待方法调用语法的方式是,它是提供缺失的后缀表示法。

方法调用语法与显式泛型实例化冲突: p[T](x) 不能写为 x.p[T] 因为 x.p[T] 总是被解析为 (x.p)[T] 。

See also: 方法调用语法限制

[: ] 符号是为了缓解这个问题: x.p[:T] 由解析器重写为 p[T](x) , x.p[:T](y) 被重写为 p[T](x, y) 。 注意 [: ] 没有 AST 表示, 直接在解析步骤中进行重写。