XU XUv0.8.8
EN

文档 / 教程

09 · 泛型、struct@、any

裸 any/temp 是动态盒。fn f#T 值泛型单态。struct@ Name 是方法集约束,有匹配方法即满足,无需 impl。

源码

@main

struct@ ToString {
    fn to_string() string
}

struct User {
    name string
    age  int
}

fn (u User) to_string() string {
    << u.name
}

struct Score {
    n int
}

fn (s Score) to_string() string {
    << "score"
}

fn print_item(item# ToString) {
    println(item.to_string())
}

fn identity#T(x T) T {
    << x
}

fn main() int {
    u := User{name: "ada", age: 36}
    print_item(u)
    print_item(Score{n: 3})

    println(identity(42))

    let box: temp = 7
    println(box is int)
    v := box as int
    println(v)
    << 0
}

编译(examples 仓库根,使用已安装的 xu):

xu run examples/09_generics_temp/main.xu
# 或:xu build examples/09_generics_temp/main.xu
# mac/linux 默认写出 ./main ;Windows 为 ./main.exe

在独立的 examples 仓库根执行;源码位于 examples/。