什么是 - >在Rust函数定义返回类型中的起源?

tib*_*bbe 2 rust

Rust使用冒号将标识符与类型分开,例如

let x: u8 = 1;
Run Code Online (Sandbox Code Playgroud)

但是,对于函数返回类型 - 而是使用>.例:

fn f() -> u8 { ... }
Run Code Online (Sandbox Code Playgroud)

有人可能会在这里使用冒号:

fn f(): u8 { ... }
Run Code Online (Sandbox Code Playgroud)

虽然使用箭头有一些优先权(例如在Haskell中),但我很好奇这个选择背后的历史原因.另外,我也很好奇它是纯粹的美学原因还是使用箭头有一些技术原因,例如简化解析.

kir*_*gin 6

好吧,我只是猜测,但我会说原因纯粹是美学. :通常发音为"has the type",而->发音为"to".所以f: fn(i32) -> i32意味着"f 具有从... i32 到 的函数类型i32 ".

基本上,有两个上下文可以提到函数的返回值:

  1. 功能项目声明:

    fn foo(x: i32) -> i32 {
      …
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 将函数赋值给具有显式类型的变量:

    let f: fn(x: i32) -> i32 = foo;
    
    Run Code Online (Sandbox Code Playgroud)

虽然在第一种情况下使用冒号代替箭头不会影响可读性,但在第二种情况下肯定会这样做.在两种情况下都有相同的符号是完全合理的.

此箭头的最终原点是Simply Typed Lambda Calculus,其中此箭头用作函数类型构造函数.从那里它来到Haskell,Scala(好吧,不完全是,他们使用=>)和其他语言.

  • 函数返回类型极有可能用箭头表示,因为它类似于ML系列语言,特别是在OCaml中,它用于Rust编译器的第一个版本. (3认同)
  • @erip你是什么意思?Rust函数确实有[types](https://doc.rust-lang.org/reference.html#function-types). (2认同)
  • 这在旧的邮件列表中进行了讨论:[整个主题](https://mail.mozilla.org/pipermail/rust-dev/2013-July/thread.html#5026),[graydon的回复](https:// mail.mozilla.org/pipermail/rust-dev/2013-July/005042.html)(基本上就是你所说的:好猜!) (2认同)