运算符重载

有限的运算符重载

目前实现了四则运算符和比较运算符的重载

四则运算符: +, -, *, /,

比较运算符: >, <, !=, ==, <=, >=

可以自定义复杂类型的运算符语义,让自定义类型的代码可读性会非常好

为了提高安全性和可维护性,重载有以下限制:

  • 重载运算符的函数内部禁止调用其它函数
  • 重载运算符的函数不能修改它们的参数
  • 四则运算符的返回值必须跟结构体类型一致,比较运算符必须返回bool类型
1. module main

3. struct Vec {
4. x int
5. y int
6. }

8. //四则运算符
9. fn (a Vec) str() string {
10. return '{$a.x, $a.y}'
11. }

13. fn (a Vec) + (b Vec) Vec {
14. return Vec{a.x + b.x, a.y + b.y}
15. }

17. fn (a Vec) - (b Vec) Vec {
18. return Vec{a.x - b.x, a.y - b.y}
19. }

21. //比较运算符
22. fn (a Vec) == (b Vec) bool {
23. return a.x == b.x && a.y == b.y
24. }

26. fn (a Vec) > (b Vec) bool {
27. return a.x > b.x && a.y > b.y
28. }

30. fn (a Vec) < (b Vec) bool {
31. return a.x < b.x && a.y < b.y
32. }

34. fn main() {
35. a := Vec{2, 3}
36. b := Vec{4, 5}
37. println(a + b) // "{6, 8}"
38. println(a - b) // "{-2, -2}"
39. println(a == b) // false
40. println(a > b) // false
41. println(a < b) // true
42. }