• 注册
  • 纯函数Pure functions by default

    V函数默认是纯的,这意味着它们的返回值仅由它们的参数决定,并且它们的评估没有副作用。

    这是通过缺少全局变量来实现的,默认情况下所有函数参数都是不可变的,即使传递了引用。

    然而,V不是纯函数式语言。可以使用相同的关键字mut修改函数参数:

    struct User {
    mut:
        is_registered bool 
    } 
    
    fn (u mut User) register() {
        u.is_registered = true 
    } 
    
    mut user := User{} 
    println(user.is_registered) // ==> "false"  
    user.register() 
    println(user.is_registered) // ==> "true"  
    

    在此示例中,接收器(它只是第一个参数)被标记为可变,因此register()可以更改用户对象。同样适用于非接收者参数:

    fn multiply_by_2(arr mut []int) {
        for i := 0; i < arr.len; i++ {
            arr[i] *= 2
        }
    }
    
    mut nums := [1, 2, 3]
    multiply_by_2(mut nums)
    println(nums) // ==> "[2, 4, 6]
    

    注意,在调用此函数时,必须在nums之前添加mut。这清楚地表明被调用的函数将修改该值。

    最好返回值而不是修改参数。修改参数只应在应用程序的性能关键部分中完成,以减少分配和复制。

    使用user.register()user = register(user)而不是register(mut user)

    V可以很容易地返回对象的修改版本:

    fn register(u User) User { 
        return { u | is_registered: true } 
    }
    
    user = register(user) 
    
    
  • 单栏布局 侧栏位置: