有限的运算符重载
struct Vec {
x int
y int
}
fn (a Vec) str() string {
return '{$a.x, $a.y}'
}
fn (a Vec) + (b Vec) Vec {
return Vec {
a.x + b.x,
a.y + b.y
}
}
fn (a Vec) - (b Vec) Vec {
return Vec {
a.x - b.x,
a.y - b.y
}
}
fn main() {
a := Vec{2, 3}
b := Vec{4, 5}
println(a + b) // ==> "{6, 8}"
println(a - b) // ==> "{-2, -2}"
}
运算符重载违背了V的简单性和可预测性的理念。 但由于科学和图形应用程序也属于V的应用范围,因此为了提高可读性,运算符重载非常重要:
a.add(b).add(c.mul(d))
的可读性远远不及 a + b + c * d
。
为了提高安全性和可维护性,运算符重载有几个局限性:
- 只能重载
+
、-
、*
、/
运算符。 - 不允许在重载函数内调用其他函数。
- 运算符函数无法修改其参数。
- 两个参数必须具有相同的类型(就像V中的所有运算符一样)。