多重方法 (Multi-methods)

Note 从 Nim 0.20 开始,要启用多重方法,开发者必须在编译时显式添加 --multimethods:on 参数。

在多重方法中,所有对象类型的参数都会用于方法派发:

  1. type
  2. Thing = ref object of RootObj
  3. Unit = ref object of Thing
  4. x: int
  5. method collide(a, b: Thing) {.base, inline.} =
  6. quit "to override!"
  7. method collide(a: Thing, b: Unit) {.inline.} =
  8. echo "1"
  9. method collide(a: Unit, b: Thing) {.inline.} =
  10. echo "2"
  11. var a, b: Unit
  12. new a
  13. new b
  14. collide(a, b) # 输出: 2