From 6b4826ece7adfeb0a355ba9b6c791753ffcf50ba Mon Sep 17 00:00:00 2001 From: "Havvy (Ryan Scheel)" Date: Sun, 14 Feb 2021 12:15:23 -0800 Subject: [PATCH] Define turbofish in the glossary It should be called out with a note on path expressions, except that there's nowhere to attach it to currently. --- src/glossary.md | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/glossary.md b/src/glossary.md index 03155170c..db5a93153 100644 --- a/src/glossary.md +++ b/src/glossary.md @@ -234,6 +234,22 @@ It allows a type to make certain promises about its behavior. Generic functions and generic structs can use traits to constrain, or bound, the types they accept. +### Turbofish + +Paths with generic parameters in expressions must prefix the opening brackets with a `::`. +Combined with the angular brackets for generics, this looks like a fish `::<>`. +As such, this syntax is colloquially referred to as turbofish syntax. + +Examples: + +```rust +let ok_num = Ok::<_, ()>(5); +let vec = [1, 2, 3].iter().map(|n| n * 2).collect::>(); +``` + +This `::` prefix is required to disambiguate generic paths with multiple comparisons in a comma-separate list. +See [the bastion of the turbofish][turbofish test] for an example. + ### Uncovered type A type which does not appear as an argument to another type. For example, @@ -286,6 +302,7 @@ example of an uninhabited type is the [never type] `!`, or an enum with no varia [structs]: items/structs.md [trait objects]: types/trait-object.md [traits]: items/traits.md +[turbofish test]: https://github.com/rust-lang/rust/blob/master/src/test/ui/bastion-of-the-turbofish.rs [types]: types.md [undefined-behavior]: behavior-considered-undefined.md [unions]: items/unions.md