有限的运算符重载


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中的所有运算符一样)。