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

2024-01-19

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

let x: u8 = 1;

但是,对于函数返回类型,则使用 -> 来代替。例子:

fn f() -> u8 { ... }

人们可能期望它在这里也使用冒号:

fn f(): u8 { ... }

虽然使用箭头有一定的优先级(例如在 Haskell 中),但我很好奇这种选择背后的历史原因。此外,我也很好奇这是否是纯粹的美学原因,或者使用箭头是否有一些技术原因,例如简化解析。


好吧,我只是猜测,但我想说原因纯粹是审美。:通常发音为“具有类型”,而->读作“至”。所以f: fn(i32) -> i32意思是“f有类型的函数来自i32 to i32”.

基本上,有两种情况可以提到函数的返回值:

  1. 功能项声明:

    fn foo(x: i32) -> i32 {
      …
    }
    
  2. 将函数分配给具有显式类型的变量:

    let f: fn(x: i32) -> i32 = foo;
    

虽然在第一种情况下使用冒号代替箭头不会损害可读性,但在第二种情况下肯定会这样做。在两种情况下使用相同的符号是非常有意义的。

该箭头的最终起源是简单类型 Lambda 演算 https://en.wikipedia.org/wiki/Simply_typed_lambda_calculus其中该箭头用作函数类型构造函数。从那里开始,它来到了 Haskell、Scala(嗯,不完全是,他们使用=>)和其他语言。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Rust 函数定义返回类型中 -> 的起源是什么? 的相关文章

随机推荐