有限的运算符重载


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

results matching ""

    No results matching ""