可变接收器及纯函数(Mutable receivers & pure functions)
struct User {
is_registered bool
}
fn (u mut User) register() {
u.is_registered = true
}
fn main() {
mut user := User{}
println(user.is_registered) // ==> "false"
user.register()
// TODO: Maybe force marking methods that modify the receiver with `!`
// user.register()!
println(user.is_registered) // ==> "true"
}
请注意,功能只能修改接收器。fn register(u mut User)
这样的做法无法通过编译。
这点非常重要,所以再次申明:V语言中函数是部分纯的,它们的参数永远不会被函数修改。
修改对象的另一种方法是返回修改后的版本(*待实现):
// TODO: this syntax is not implemented yet
fn register(u User) User {
return { u | is_registered: true }
}
user = register(user)