【问题标题】:What does "T" stand for in Result<T, E> in Rust?Rust 的 Result<T, E> 中的“T”代表什么?
【发布时间】:2020-06-20 17:19:16
【问题描述】:

官方documentation大量引用T

enum Result<T, E> {
    Ok(T),
    Err(E),
}

我认为这些是占位符首字母缩写词。虽然E 应该代表“错误”,但我不确定T 代表什么。

【问题讨论】:

  • 在 Rust 中很相似,但 T 通常是“类型”的缩写。当类型没有更具体的含义时,它只是泛型类型的通用名称。
  • 不是 Rust 特有的:例如stackoverflow.com/questions/6008241/…

标签: rust acronym rust-result


【解决方案1】:

这是通用t类型的命名约定。

Rust 中的泛型类型通常用一个大写字母命名。 non_camel_case_types 警告强制名称以大写字母开头,但这只是一个警告,没有什么可以阻止您以其他方式命名它。

T 是最常见的字母,你会经常看到这个项目真的不关心类型代表什么,但在特殊情况下还有一些其他常用的字母如下:

  • 如果类型是错误类型:EExample:

    fn err(self) -> Option<E>
    
  • 如果类型是谓词:PExample:

    fn filter<P>(self, predicate: P) -> Filter<Self, P>
    where
        P: FnMut(&Self::Item) -> bool, 
    
  • 如果类型是函数类型:FGExample:

    std::iter::Iterator::for_each<F>(self, f: F)
    where
        F: FnMut(Self::Item)
    
  • 如果类型是泛型函数的返回类型:RExample:

    fn with<F, R>(&'static self, f: F) -> R
    where
        F: FnOnce(&T) -> R, 
    
  • 如果类型是某个映射中的键类型:KExample:

    fn keys(&self) -> Keys<K, V>
    
  • 如果该类型是某个映射中的值类型:VExample:

    fn insert(&mut self, key: K, value: V) -> Option<V>
    
  • 如果类型是Iterator 的实现:IExample:

    impl<I> Clone for Fuse<I> where
        I: Clone, 
    
  • 如果类型是Read 的实现:RExample:

    fn chain<R: Read>(self, next: R) -> Chain<Self, R>
    where
        Self: Sized, 
    
  • 如果类型是Write 的实现:WExample:

    struct BufWriter<W: Write> { /* fields omitted */ }
    
  • 如果类型是ToSocketAddrs 的实现:AExample:

    fn connect<A: ToSocketAddrs>(addr: A) -> Result<TcpStream>
    
  • 如果类型是路径(即实现AsRef&lt;Path&gt;):PExample:

    pub fn open<P: AsRef<Path>>(path: P) -> Result<File>
    
  • 其他所有内容:TU 等,通常按字母顺序排列。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-15
    • 1970-01-01
    • 2020-10-08
    • 2015-02-12
    • 2016-06-10
    相关资源
    最近更新 更多