Carbon语言 泛型

泛型接口用于做泛型代码的类型检查。

interface Summary {
  fn Summarize[me: Self]() -> String;
}

这个interface不是Java中的 interface,而是有点像C++中的 Concept,对泛型做类型检查用的。

使用泛型函数:

fn PrintSummary[T:! Summary](x: T) {
  Console.Print(x.Summarize());
}

定义了一个支持Summary泛型接口的泛型函数PrintSummary 实现泛型接口。

class NewsArticle {
  ...
  impl as Summary {
    fn Summarize[me: Self]() -> String { ... }
  }
}

所以,可以使用泛型函数来调用实现了泛型接口的类对象。

// n 是 NewsArticle类型
PrintSummary(n);

也可以直接调用:

// n 是 NewsArticle类型
n.Summarize();

扩展其他包的API

import OtherPackage;

interface Summary {
  fn Summarize[me: Self]() -> String;
}

// 泛型函数
fn PrintSummary[T:! Summary](x: T) {
  Console.Print(x.Summarize());
}

// 扩展外部API的接口
external impl OtherPackege.Tweet as Summary {
  fn Summarize[me: Self]() -> String { ... }
}

fn SummarizeTweet(t: Tweet) {
  PrintSummary(t);
}

我们导入了一个外部的包OtherPackege,它之中有一个Tweet类型,然后我们可以通过external impl来扩展它支持它本不存在的泛型接口。

Carbon语言中的指针是一种数据类型,指针是存放数据的内存单元地址。计算机系统的内存拥有大量的存储单元,每个存储单元的大小为1字节,为了便于管理,必须为每个存储单元编号,该编号就是存储单元的“地址&rd ...