方法

V没有Class。但是可以为类型定义方法。 方法是一个具有特殊接收器参数的函数, 只有指定类型的接收器才能执行此函数。 接收方在fn和方法名之间有自己的参数列表。

struct User {
    name string
    email string
mut:
    age int
}

fn (u User) can_register() bool {
    return u.age > 15
}

fn (u mut User) has_birthday() {
    u.age += 1
}

fn main() {
    mut bob := User {
        name: 'Bob'
        email: 'bob@bob.com'
        age: 15
    }
    alice := User {
        name: 'Alice'
        email: 'alice@alice-mail.com'
        age: 17
    }
    println(bob.can_register())
    println("Bob needs to be 16 to register, but he only is ${bob.age}.")
    println(alice.can_register())
    bob.has_birthday()
    println(bob.age)
}

输出

false
Bob needs to be 16 to register, but he only is 15.
true
16

上面的代码实现了两种类型为User的接收器u的方法。 注意,has\birthday()方法有一个mut接收器,这是必需的,因为我们要更改它的数据。 V的惯例不是使用诸如self、this之类的接收者名字,而是一个短的,最好是一个只有一个字母的名字。

练习

1.为Person类型创建一个确定某人是否未成年的方法。 2.创建一个确定Animal是否有毛发的方法。

Last updated