美文网首页V语言
V语言学习笔记-14泛型

V语言学习笔记-14泛型

作者: lydiandy | 来源:发表于2020-05-19 16:21 被阅读0次

    目前的泛型主要有这三种:泛型结构体,泛型函数,泛型方法

    泛型结构体

    struct DB {
        driver string
    }
    
    struct User {
        db DB
    mut:
        name string
    }
    
    struct Repo<T> {
        db DB
    mut:
        model  T
    }
    
    fn new_repo<U>(db DB) Repo<U> {
        return Repo<U>{db: db}
    }
    
    fn test_generic_struct() {
        mut a :=  new_repo<User>(DB{})
        a.model.name = 'joe'
        mut b := Repo<User>{db: DB{}}
        b.model.name = 'joe'
        assert a.model.name == 'joe'
        assert b.model.name == 'joe'
    }
    

    泛型函数

    判断2个数组是否相等的泛型函数

    //vlib/builtin/array.v
    fn array_eq<T>(a1, a2 []T) bool {
       if a1.len != a2.len {
          return false
       }
       for i := 0; i < a1.len; i++ {
          if a1[i] != a2[i] {
             return false
          }
       }
       return true
    }
    

    泛型方法

    struct Point {
    mut:
        x f64
        y f64
    }
    
    fn (mut p Point) translate<T>(x, y T) {
        p.x += x
        p.y += y
    }
    
    fn test_generic_method() {
        mut p := Point{}
        p.translate(2, 1.0)
        assert p.x == 2.0 && p.y == 1.0
    }
    

    相关文章

      网友评论

        本文标题:V语言学习笔记-14泛型

        本文链接:https://www.haomeiwen.com/subject/xbvbohtx.html