锈使用冒号从类型Rust函数定义返回类型的起源是什么?
let x: u8 = 1;
但是分开的标识符,等等,用于函数返回类型 - >来代替。例如:
fn f() -> u8 { ... }
人们可能期望它在这里使用一个冒号,以及:
fn f(): u8 { ... }
在使用箭头具有一定的优先级(例如,在Haskell),我很好奇这背后的历史原因选择。另外,我也很好奇它是纯粹的美学原因还是使用箭头有一些技术原因,例如简化解析。
锈使用冒号从类型Rust函数定义返回类型的起源是什么?
let x: u8 = 1;
但是分开的标识符,等等,用于函数返回类型 - >来代替。例如:
fn f() -> u8 { ... }
人们可能期望它在这里使用一个冒号,以及:
fn f(): u8 { ... }
在使用箭头具有一定的优先级(例如,在Haskell),我很好奇这背后的历史原因选择。另外,我也很好奇它是纯粹的美学原因还是使用箭头有一些技术原因,例如简化解析。
嗯,我只是猜测,但我会说,原因是纯粹的审美。 :
通常发音为“has the type”,而->
发音为“to”。因此,f: fn(i32) -> i32
意味着“f 具有来自i32
到i32
”功能的类型“。
基本上,存在其中可以提到的函数的返回值两个上下文:
功能项目的声明:一个函数的
fn foo(x: i32) -> i32 {
…
}
分配到与显式类型的可变:
let f: fn(x: i32) -> i32 = foo;
虽然使用冒号而不是箭头不会伤害第一种情况下的可读性,但它肯定会在第二种情况下这样做。在两种情况下都具有相同的符号是非常合理的。
此箭头的最终来源是Simply Typed Lambda Calculus,其中此箭头用作函数类型构造函数。从那里它来到Haskell,斯卡拉(好吧,不完全是,他们使用=>
)和其他语言。
'x'的类型是'u8'; 'f'的类型是* not *'u8'。 – Shepmaster
这是约定。许多语言都使用它。 C++有尾随返回类型。 OCaml具有类似的功能签名样式。它只是。 – erip
一个可能的原因是在数学中,箭头表示从一个域到一个共域的映射。例如,'f:X - > Y'; 'f'是集合'X'到集合'Y'的映射。 – erip