396 lines
41 KiB
HTML
396 lines
41 KiB
HTML
|
<!DOCTYPE HTML>
|
|||
|
<html lang="en" class="sidebar-visible no-js light">
|
|||
|
<head>
|
|||
|
<!-- Book generated using mdBook -->
|
|||
|
<meta charset="UTF-8">
|
|||
|
<title>B - Operators and Symbols - The Rust Programming Language</title>
|
|||
|
|
|||
|
|
|||
|
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
|
|||
|
<meta name="description" content="">
|
|||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|||
|
<meta name="theme-color" content="#ffffff" />
|
|||
|
|
|||
|
<link rel="shortcut icon" href="favicon.png">
|
|||
|
<link rel="stylesheet" href="css/variables.css">
|
|||
|
<link rel="stylesheet" href="css/general.css">
|
|||
|
<link rel="stylesheet" href="css/chrome.css">
|
|||
|
<link rel="stylesheet" href="css/print.css" media="print">
|
|||
|
|
|||
|
<!-- Fonts -->
|
|||
|
<link rel="stylesheet" href="FontAwesome/css/font-awesome.css">
|
|||
|
<link href="googleFonts/css.css" rel="stylesheet" type="text/css">
|
|||
|
|
|||
|
<!-- Highlight.js Stylesheets -->
|
|||
|
<link rel="stylesheet" href="highlight.css">
|
|||
|
<link rel="stylesheet" href="tomorrow-night.css">
|
|||
|
<link rel="stylesheet" href="ayu-highlight.css">
|
|||
|
|
|||
|
<!-- Custom theme stylesheets -->
|
|||
|
|
|||
|
<link rel="stylesheet" href="ferris.css">
|
|||
|
|
|||
|
<link rel="stylesheet" href="theme/2018-edition.css">
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</head>
|
|||
|
<body>
|
|||
|
<!-- Provide site root to javascript -->
|
|||
|
<script type="text/javascript">
|
|||
|
var path_to_root = "";
|
|||
|
var default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? "light" : "light";
|
|||
|
</script>
|
|||
|
|
|||
|
<!-- Work around some values being stored in localStorage wrapped in quotes -->
|
|||
|
<script type="text/javascript">
|
|||
|
try {
|
|||
|
var theme = localStorage.getItem('mdbook-theme');
|
|||
|
var sidebar = localStorage.getItem('mdbook-sidebar');
|
|||
|
|
|||
|
if (theme.startsWith('"') && theme.endsWith('"')) {
|
|||
|
localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
|
|||
|
}
|
|||
|
|
|||
|
if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
|
|||
|
localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
|
|||
|
}
|
|||
|
} catch (e) { }
|
|||
|
</script>
|
|||
|
|
|||
|
<!-- Set the theme before any content is loaded, prevents flash -->
|
|||
|
<script type="text/javascript">
|
|||
|
var theme;
|
|||
|
try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
|
|||
|
if (theme === null || theme === undefined) { theme = default_theme; }
|
|||
|
var html = document.querySelector('html');
|
|||
|
html.classList.remove('no-js')
|
|||
|
html.classList.remove('light')
|
|||
|
html.classList.add(theme);
|
|||
|
html.classList.add('js');
|
|||
|
</script>
|
|||
|
|
|||
|
<!-- Hide / unhide sidebar before it is displayed -->
|
|||
|
<script type="text/javascript">
|
|||
|
var html = document.querySelector('html');
|
|||
|
var sidebar = 'hidden';
|
|||
|
if (document.body.clientWidth >= 1080) {
|
|||
|
try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
|
|||
|
sidebar = sidebar || 'visible';
|
|||
|
}
|
|||
|
html.classList.remove('sidebar-visible');
|
|||
|
html.classList.add("sidebar-" + sidebar);
|
|||
|
</script>
|
|||
|
|
|||
|
<nav id="sidebar" class="sidebar" aria-label="Table of contents">
|
|||
|
<div id="sidebar-scrollbox" class="sidebar-scrollbox">
|
|||
|
<ol class="chapter"><li class="expanded affix "><a href="title-page.html">The Rust Programming Language</a></li><li class="expanded affix "><a href="foreword.html">Foreword</a></li><li class="expanded affix "><a href="ch00-00-introduction.html">Introduction</a></li><li class="expanded "><a href="ch01-00-getting-started.html"><strong aria-hidden="true">1.</strong> Getting Started</a></li><li><ol class="section"><li class="expanded "><a href="ch01-01-installation.html"><strong aria-hidden="true">1.1.</strong> Installation</a></li><li class="expanded "><a href="ch01-02-hello-world.html"><strong aria-hidden="true">1.2.</strong> Hello, World!</a></li><li class="expanded "><a href="ch01-03-hello-cargo.html"><strong aria-hidden="true">1.3.</strong> Hello, Cargo!</a></li></ol></li><li class="expanded "><a href="ch02-00-guessing-game-tutorial.html"><strong aria-hidden="true">2.</strong> Programming a Guessing Game</a></li><li class="expanded "><a href="ch03-00-common-programming-concepts.html"><strong aria-hidden="true">3.</strong> Common Programming Concepts</a></li><li><ol class="section"><li class="expanded "><a href="ch03-01-variables-and-mutability.html"><strong aria-hidden="true">3.1.</strong> Variables and Mutability</a></li><li class="expanded "><a href="ch03-02-data-types.html"><strong aria-hidden="true">3.2.</strong> Data Types</a></li><li class="expanded "><a href="ch03-03-how-functions-work.html"><strong aria-hidden="true">3.3.</strong> Functions</a></li><li class="expanded "><a href="ch03-04-comments.html"><strong aria-hidden="true">3.4.</strong> Comments</a></li><li class="expanded "><a href="ch03-05-control-flow.html"><strong aria-hidden="true">3.5.</strong> Control Flow</a></li></ol></li><li class="expanded "><a href="ch04-00-understanding-ownership.html"><strong aria-hidden="true">4.</strong> Understanding Ownership</a></li><li><ol class="section"><li class="expanded "><a href="ch04-01-what-is-ownership.html"><strong aria-hidden="true">4.1.</strong> What is Ownership?</a></li><li class="expanded "><a href="ch04-02-references-and-borrowing.html"><strong aria-hidden="true">4.2.</strong> References and Borrowing</a></li><li class="expanded "><a href="ch04-03-slices.html"><strong aria-hidden="true">4.3.</strong> The Slice Type</a></li></ol></li><li class="expanded "><a href="ch05-00-structs.html"><strong aria-hidden="true">5.</strong> Using Structs to Structure Related Data</a></li><li><ol class="section"><li class="expanded "><a href="ch05-01-defining-structs.html"><strong aria-hidden="true">5.1.</strong> Defining and Instantiating Structs</a></li><li class="expanded "><a href="ch05-02-example-structs.html"><strong aria-hidden="true">5.2.</strong> An Example Program Using Structs</a></li><li class="expanded "><a href="ch05-03-method-syntax.html"><strong aria-hidden="true">5.3.</strong> Method Syntax</a></li></ol></li><li class="expanded "><a href="ch06-00-enums.html"><strong aria-hidden="true">6.</strong> Enums and Pattern Matching</a></li><li><ol class="section"><li class="expanded "><a href="ch06-01-defining-an-enum.html"><strong aria-hidden="true">6.1.</strong> Defining an Enum</a></li><li class="expanded "><a href="ch06-02-match.html"><strong aria-hidden="true">6.2.</strong> The match Control Flow Operator</a></li><li class="expanded "><a href="ch06-03-if-let.html"><strong aria-hidden="true">6.3.</strong> Concise Control Flow with if let</a></li></ol></li><li class="expanded "><a href="ch07-00-managing-growing-projects-with-packages-crates-and-modules.html"><strong aria-hidden="true">7.</strong> Managing Growing Projects with Packages, Crates, and Modules</a></li><li><ol class="section"><li class="expanded "><a href="ch07-01-packages-and-crates.html"><strong aria-hidden="true">7.1.</strong> Packages and Crates</a></li><li class="expanded "><a href="ch07-02-defining-modules-to-control-scope-and-privacy.html"><strong aria-hidden="true">7.2.</strong> Defining Modules to Control Scope and Privacy</a></li><li class="expanded "><a href="ch07-03-paths-for-referring-to-an-item-in-the-module-tree.html"><
|
|||
|
</div>
|
|||
|
<div id="sidebar-resize-handle" class="sidebar-resize-handle"></div>
|
|||
|
</nav>
|
|||
|
|
|||
|
<div id="page-wrapper" class="page-wrapper">
|
|||
|
|
|||
|
<div class="page">
|
|||
|
|
|||
|
<div id="menu-bar" class="menu-bar">
|
|||
|
<div id="menu-bar-sticky-container">
|
|||
|
<div class="left-buttons">
|
|||
|
<button id="sidebar-toggle" class="icon-button" type="button" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="sidebar">
|
|||
|
<i class="fa fa-bars"></i>
|
|||
|
</button>
|
|||
|
<button id="theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="theme-list">
|
|||
|
<i class="fa fa-paint-brush"></i>
|
|||
|
</button>
|
|||
|
<ul id="theme-list" class="theme-popup" aria-label="Themes" role="menu">
|
|||
|
<li role="none"><button role="menuitem" class="theme" id="light">Light (default)</button></li>
|
|||
|
<li role="none"><button role="menuitem" class="theme" id="rust">Rust</button></li>
|
|||
|
<li role="none"><button role="menuitem" class="theme" id="coal">Coal</button></li>
|
|||
|
<li role="none"><button role="menuitem" class="theme" id="navy">Navy</button></li>
|
|||
|
<li role="none"><button role="menuitem" class="theme" id="ayu">Ayu</button></li>
|
|||
|
</ul>
|
|||
|
|
|||
|
<button id="search-toggle" class="icon-button" type="button" title="Search. (Shortkey: s)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="S" aria-controls="searchbar">
|
|||
|
<i class="fa fa-search"></i>
|
|||
|
</button>
|
|||
|
|
|||
|
</div>
|
|||
|
|
|||
|
<h1 class="menu-title">The Rust Programming Language</h1>
|
|||
|
|
|||
|
<div class="right-buttons">
|
|||
|
<a href="print.html" title="Print this book" aria-label="Print this book">
|
|||
|
<i id="print-button" class="fa fa-print"></i>
|
|||
|
</a>
|
|||
|
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
|
|||
|
|
|||
|
<div id="search-wrapper" class="hidden">
|
|||
|
<form id="searchbar-outer" class="searchbar-outer">
|
|||
|
<input type="search" name="search" id="searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="searchresults-outer" aria-describedby="searchresults-header">
|
|||
|
</form>
|
|||
|
<div id="searchresults-outer" class="searchresults-outer hidden">
|
|||
|
<div id="searchresults-header" class="searchresults-header"></div>
|
|||
|
<ul id="searchresults">
|
|||
|
</ul>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
|
|||
|
|
|||
|
<!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
|
|||
|
<script type="text/javascript">
|
|||
|
document.getElementById('sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
|
|||
|
document.getElementById('sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
|
|||
|
Array.from(document.querySelectorAll('#sidebar a')).forEach(function(link) {
|
|||
|
link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
|
|||
|
});
|
|||
|
</script>
|
|||
|
|
|||
|
<div id="content" class="content">
|
|||
|
<main>
|
|||
|
<h2><a class="header" href="#appendix-b-operators-and-symbols" id="appendix-b-operators-and-symbols">Appendix B: Operators and Symbols</a></h2>
|
|||
|
<p>This appendix contains a glossary of Rust’s syntax, including operators and
|
|||
|
other symbols that appear by themselves or in the context of paths, generics,
|
|||
|
trait bounds, macros, attributes, comments, tuples, and brackets.</p>
|
|||
|
<h3><a class="header" href="#operators" id="operators">Operators</a></h3>
|
|||
|
<p>Table B-1 contains the operators in Rust, an example of how the operator would
|
|||
|
appear in context, a short explanation, and whether that operator is
|
|||
|
overloadable. If an operator is overloadable, the relevant trait to use to
|
|||
|
overload that operator is listed.</p>
|
|||
|
<p><span class="caption">Table B-1: Operators</span></p>
|
|||
|
<table><thead><tr><th>Operator</th><th>Example</th><th>Explanation</th><th>Overloadable?</th></tr></thead><tbody>
|
|||
|
<tr><td><code>!</code></td><td><code>ident!(...)</code>, <code>ident!{...}</code>, <code>ident![...]</code></td><td>Macro expansion</td><td></td></tr>
|
|||
|
<tr><td><code>!</code></td><td><code>!expr</code></td><td>Bitwise or logical complement</td><td><code>Not</code></td></tr>
|
|||
|
<tr><td><code>!=</code></td><td><code>var != expr</code></td><td>Nonequality comparison</td><td><code>PartialEq</code></td></tr>
|
|||
|
<tr><td><code>%</code></td><td><code>expr % expr</code></td><td>Arithmetic remainder</td><td><code>Rem</code></td></tr>
|
|||
|
<tr><td><code>%=</code></td><td><code>var %= expr</code></td><td>Arithmetic remainder and assignment</td><td><code>RemAssign</code></td></tr>
|
|||
|
<tr><td><code>&</code></td><td><code>&expr</code>, <code>&mut expr</code></td><td>Borrow</td><td></td></tr>
|
|||
|
<tr><td><code>&</code></td><td><code>&type</code>, <code>&mut type</code>, <code>&'a type</code>, <code>&'a mut type</code></td><td>Borrowed pointer type</td><td></td></tr>
|
|||
|
<tr><td><code>&</code></td><td><code>expr & expr</code></td><td>Bitwise AND</td><td><code>BitAnd</code></td></tr>
|
|||
|
<tr><td><code>&=</code></td><td><code>var &= expr</code></td><td>Bitwise AND and assignment</td><td><code>BitAndAssign</code></td></tr>
|
|||
|
<tr><td><code>&&</code></td><td><code>expr && expr</code></td><td>Logical AND</td><td></td></tr>
|
|||
|
<tr><td><code>*</code></td><td><code>expr * expr</code></td><td>Arithmetic multiplication</td><td><code>Mul</code></td></tr>
|
|||
|
<tr><td><code>*=</code></td><td><code>var *= expr</code></td><td>Arithmetic multiplication and assignment</td><td><code>MulAssign</code></td></tr>
|
|||
|
<tr><td><code>*</code></td><td><code>*expr</code></td><td>Dereference</td><td></td></tr>
|
|||
|
<tr><td><code>*</code></td><td><code>*const type</code>, <code>*mut type</code></td><td>Raw pointer</td><td></td></tr>
|
|||
|
<tr><td><code>+</code></td><td><code>trait + trait</code>, <code>'a + trait</code></td><td>Compound type constraint</td><td></td></tr>
|
|||
|
<tr><td><code>+</code></td><td><code>expr + expr</code></td><td>Arithmetic addition</td><td><code>Add</code></td></tr>
|
|||
|
<tr><td><code>+=</code></td><td><code>var += expr</code></td><td>Arithmetic addition and assignment</td><td><code>AddAssign</code></td></tr>
|
|||
|
<tr><td><code>,</code></td><td><code>expr, expr</code></td><td>Argument and element separator</td><td></td></tr>
|
|||
|
<tr><td><code>-</code></td><td><code>- expr</code></td><td>Arithmetic negation</td><td><code>Neg</code></td></tr>
|
|||
|
<tr><td><code>-</code></td><td><code>expr - expr</code></td><td>Arithmetic subtraction</td><td><code>Sub</code></td></tr>
|
|||
|
<tr><td><code>-=</code></td><td><code>var -= expr</code></td><td>Arithmetic subtraction and assignment</td><td><code>SubAssign</code></td></tr>
|
|||
|
<tr><td><code>-></code></td><td><code>fn(...) -> type</code>, <code>|...| -> type</code></td><td>Function and closure return type</td><td></td></tr>
|
|||
|
<tr><td><code>.</code></td><td><code>expr.ident</code></td><td>Member access</td><td></td></tr>
|
|||
|
<tr><td><code>..</code></td><td><code>..</code>, <code>expr..</code>, <code>..expr</code>, <code>expr..expr</code></td><td>Right-exclusive range literal</td><td></td></tr>
|
|||
|
<tr><td><code>..=</code></td><td><code>..=expr</code>, <code>expr..=expr</code></td><td>Right-inclusive range literal</td><td></td></tr>
|
|||
|
<tr><td><code>..</code></td><td><code>..expr</code></td><td>Struct literal update syntax</td><td></td></tr>
|
|||
|
<tr><td><code>..</code></td><td><code>variant(x, ..)</code>, <code>struct_type { x, .. }</code></td><td>“And the rest” pattern binding</td><td></td></tr>
|
|||
|
<tr><td><code>...</code></td><td><code>expr...expr</code></td><td>In a pattern: inclusive range pattern</td><td></td></tr>
|
|||
|
<tr><td><code>/</code></td><td><code>expr / expr</code></td><td>Arithmetic division</td><td><code>Div</code></td></tr>
|
|||
|
<tr><td><code>/=</code></td><td><code>var /= expr</code></td><td>Arithmetic division and assignment</td><td><code>DivAssign</code></td></tr>
|
|||
|
<tr><td><code>:</code></td><td><code>pat: type</code>, <code>ident: type</code></td><td>Constraints</td><td></td></tr>
|
|||
|
<tr><td><code>:</code></td><td><code>ident: expr</code></td><td>Struct field initializer</td><td></td></tr>
|
|||
|
<tr><td><code>:</code></td><td><code>'a: loop {...}</code></td><td>Loop label</td><td></td></tr>
|
|||
|
<tr><td><code>;</code></td><td><code>expr;</code></td><td>Statement and item terminator</td><td></td></tr>
|
|||
|
<tr><td><code>;</code></td><td><code>[...; len]</code></td><td>Part of fixed-size array syntax</td><td></td></tr>
|
|||
|
<tr><td><code><<</code></td><td><code>expr << expr</code></td><td>Left-shift</td><td><code>Shl</code></td></tr>
|
|||
|
<tr><td><code><<=</code></td><td><code>var <<= expr</code></td><td>Left-shift and assignment</td><td><code>ShlAssign</code></td></tr>
|
|||
|
<tr><td><code><</code></td><td><code>expr < expr</code></td><td>Less than comparison</td><td><code>PartialOrd</code></td></tr>
|
|||
|
<tr><td><code><=</code></td><td><code>expr <= expr</code></td><td>Less than or equal to comparison</td><td><code>PartialOrd</code></td></tr>
|
|||
|
<tr><td><code>=</code></td><td><code>var = expr</code>, <code>ident = type</code></td><td>Assignment/equivalence</td><td></td></tr>
|
|||
|
<tr><td><code>==</code></td><td><code>expr == expr</code></td><td>Equality comparison</td><td><code>PartialEq</code></td></tr>
|
|||
|
<tr><td><code>=></code></td><td><code>pat => expr</code></td><td>Part of match arm syntax</td><td></td></tr>
|
|||
|
<tr><td><code>></code></td><td><code>expr > expr</code></td><td>Greater than comparison</td><td><code>PartialOrd</code></td></tr>
|
|||
|
<tr><td><code>>=</code></td><td><code>expr >= expr</code></td><td>Greater than or equal to comparison</td><td><code>PartialOrd</code></td></tr>
|
|||
|
<tr><td><code>>></code></td><td><code>expr >> expr</code></td><td>Right-shift</td><td><code>Shr</code></td></tr>
|
|||
|
<tr><td><code>>>=</code></td><td><code>var >>= expr</code></td><td>Right-shift and assignment</td><td><code>ShrAssign</code></td></tr>
|
|||
|
<tr><td><code>@</code></td><td><code>ident @ pat</code></td><td>Pattern binding</td><td></td></tr>
|
|||
|
<tr><td><code>^</code></td><td><code>expr ^ expr</code></td><td>Bitwise exclusive OR</td><td><code>BitXor</code></td></tr>
|
|||
|
<tr><td><code>^=</code></td><td><code>var ^= expr</code></td><td>Bitwise exclusive OR and assignment</td><td><code>BitXorAssign</code></td></tr>
|
|||
|
<tr><td><code>|</code></td><td><code>pat | pat</code></td><td>Pattern alternatives</td><td></td></tr>
|
|||
|
<tr><td><code>|</code></td><td><code>expr | expr</code></td><td>Bitwise OR</td><td><code>BitOr</code></td></tr>
|
|||
|
<tr><td><code>|=</code></td><td><code>var |= expr</code></td><td>Bitwise OR and assignment</td><td><code>BitOrAssign</code></td></tr>
|
|||
|
<tr><td><code>||</code></td><td><code>expr || expr</code></td><td>Logical OR</td><td></td></tr>
|
|||
|
<tr><td><code>?</code></td><td><code>expr?</code></td><td>Error propagation</td><td></td></tr>
|
|||
|
</tbody></table>
|
|||
|
<h3><a class="header" href="#non-operator-symbols" id="non-operator-symbols">Non-operator Symbols</a></h3>
|
|||
|
<p>The following list contains all non-letters that don’t function as operators;
|
|||
|
that is, they don’t behave like a function or method call.</p>
|
|||
|
<p>Table B-2 shows symbols that appear on their own and are valid in a variety of
|
|||
|
locations.</p>
|
|||
|
<p><span class="caption">Table B-2: Stand-Alone Syntax</span></p>
|
|||
|
<table><thead><tr><th>Symbol</th><th>Explanation</th></tr></thead><tbody>
|
|||
|
<tr><td><code>'ident</code></td><td>Named lifetime or loop label</td></tr>
|
|||
|
<tr><td><code>...u8</code>, <code>...i32</code>, <code>...f64</code>, <code>...usize</code>, etc.</td><td>Numeric literal of specific type</td></tr>
|
|||
|
<tr><td><code>"..."</code></td><td>String literal</td></tr>
|
|||
|
<tr><td><code>r"..."</code>, <code>r#"..."#</code>, <code>r##"..."##</code>, etc.</td><td>Raw string literal, escape characters not processed</td></tr>
|
|||
|
<tr><td><code>b"..."</code></td><td>Byte string literal; constructs a <code>[u8]</code> instead of a string</td></tr>
|
|||
|
<tr><td><code>br"..."</code>, <code>br#"..."#</code>, <code>br##"..."##</code>, etc.</td><td>Raw byte string literal, combination of raw and byte string literal</td></tr>
|
|||
|
<tr><td><code>'...'</code></td><td>Character literal</td></tr>
|
|||
|
<tr><td><code>b'...'</code></td><td>ASCII byte literal</td></tr>
|
|||
|
<tr><td><code>|...| expr</code></td><td>Closure</td></tr>
|
|||
|
<tr><td><code>!</code></td><td>Always empty bottom type for diverging functions</td></tr>
|
|||
|
<tr><td><code>_</code></td><td>“Ignored” pattern binding; also used to make integer literals readable</td></tr>
|
|||
|
</tbody></table>
|
|||
|
<p>Table B-3 shows symbols that appear in the context of a path through the module
|
|||
|
hierarchy to an item.</p>
|
|||
|
<p><span class="caption">Table B-3: Path-Related Syntax</span></p>
|
|||
|
<table><thead><tr><th>Symbol</th><th>Explanation</th></tr></thead><tbody>
|
|||
|
<tr><td><code>ident::ident</code></td><td>Namespace path</td></tr>
|
|||
|
<tr><td><code>::path</code></td><td>Path relative to the crate root (i.e., an explicitly absolute path)</td></tr>
|
|||
|
<tr><td><code>self::path</code></td><td>Path relative to the current module (i.e., an explicitly relative path).</td></tr>
|
|||
|
<tr><td><code>super::path</code></td><td>Path relative to the parent of the current module</td></tr>
|
|||
|
<tr><td><code>type::ident</code>, <code><type as trait>::ident</code></td><td>Associated constants, functions, and types</td></tr>
|
|||
|
<tr><td><code><type>::...</code></td><td>Associated item for a type that cannot be directly named (e.g., <code><&T>::...</code>, <code><[T]>::...</code>, etc.)</td></tr>
|
|||
|
<tr><td><code>trait::method(...)</code></td><td>Disambiguating a method call by naming the trait that defines it</td></tr>
|
|||
|
<tr><td><code>type::method(...)</code></td><td>Disambiguating a method call by naming the type for which it’s defined</td></tr>
|
|||
|
<tr><td><code><type as trait>::method(...)</code></td><td>Disambiguating a method call by naming the trait and type</td></tr>
|
|||
|
</tbody></table>
|
|||
|
<p>Table B-4 shows symbols that appear in the context of using generic type
|
|||
|
parameters.</p>
|
|||
|
<p><span class="caption">Table B-4: Generics</span></p>
|
|||
|
<table><thead><tr><th>Symbol</th><th>Explanation</th></tr></thead><tbody>
|
|||
|
<tr><td><code>path<...></code></td><td>Specifies parameters to generic type in a type (e.g., <code>Vec<u8></code>)</td></tr>
|
|||
|
<tr><td><code>path::<...></code>, <code>method::<...></code></td><td>Specifies parameters to generic type, function, or method in an expression; often referred to as turbofish (e.g., <code>"42".parse::<i32>()</code>)</td></tr>
|
|||
|
<tr><td><code>fn ident<...> ...</code></td><td>Define generic function</td></tr>
|
|||
|
<tr><td><code>struct ident<...> ...</code></td><td>Define generic structure</td></tr>
|
|||
|
<tr><td><code>enum ident<...> ...</code></td><td>Define generic enumeration</td></tr>
|
|||
|
<tr><td><code>impl<...> ...</code></td><td>Define generic implementation</td></tr>
|
|||
|
<tr><td><code>for<...> type</code></td><td>Higher-ranked lifetime bounds</td></tr>
|
|||
|
<tr><td><code>type<ident=type></code></td><td>A generic type where one or more associated types have specific assignments (e.g., <code>Iterator<Item=T></code>)</td></tr>
|
|||
|
</tbody></table>
|
|||
|
<p>Table B-5 shows symbols that appear in the context of constraining generic type
|
|||
|
parameters with trait bounds.</p>
|
|||
|
<p><span class="caption">Table B-5: Trait Bound Constraints</span></p>
|
|||
|
<table><thead><tr><th>Symbol</th><th>Explanation</th></tr></thead><tbody>
|
|||
|
<tr><td><code>T: U</code></td><td>Generic parameter <code>T</code> constrained to types that implement <code>U</code></td></tr>
|
|||
|
<tr><td><code>T: 'a</code></td><td>Generic type <code>T</code> must outlive lifetime <code>'a</code> (meaning the type cannot transitively contain any references with lifetimes shorter than <code>'a</code>)</td></tr>
|
|||
|
<tr><td><code>T : 'static</code></td><td>Generic type <code>T</code> contains no borrowed references other than <code>'static</code> ones</td></tr>
|
|||
|
<tr><td><code>'b: 'a</code></td><td>Generic lifetime <code>'b</code> must outlive lifetime <code>'a</code></td></tr>
|
|||
|
<tr><td><code>T: ?Sized</code></td><td>Allow generic type parameter to be a dynamically sized type</td></tr>
|
|||
|
<tr><td><code>'a + trait</code>, <code>trait + trait</code></td><td>Compound type constraint</td></tr>
|
|||
|
</tbody></table>
|
|||
|
<p>Table B-6 shows symbols that appear in the context of calling or defining
|
|||
|
macros and specifying attributes on an item.</p>
|
|||
|
<p><span class="caption">Table B-6: Macros and Attributes</span></p>
|
|||
|
<table><thead><tr><th>Symbol</th><th>Explanation</th></tr></thead><tbody>
|
|||
|
<tr><td><code>#[meta]</code></td><td>Outer attribute</td></tr>
|
|||
|
<tr><td><code>#![meta]</code></td><td>Inner attribute</td></tr>
|
|||
|
<tr><td><code>$ident</code></td><td>Macro substitution</td></tr>
|
|||
|
<tr><td><code>$ident:kind</code></td><td>Macro capture</td></tr>
|
|||
|
<tr><td><code>$(…)…</code></td><td>Macro repetition</td></tr>
|
|||
|
</tbody></table>
|
|||
|
<p>Table B-7 shows symbols that create comments.</p>
|
|||
|
<p><span class="caption">Table B-7: Comments</span></p>
|
|||
|
<table><thead><tr><th>Symbol</th><th>Explanation</th></tr></thead><tbody>
|
|||
|
<tr><td><code>//</code></td><td>Line comment</td></tr>
|
|||
|
<tr><td><code>//!</code></td><td>Inner line doc comment</td></tr>
|
|||
|
<tr><td><code>///</code></td><td>Outer line doc comment</td></tr>
|
|||
|
<tr><td><code>/*...*/</code></td><td>Block comment</td></tr>
|
|||
|
<tr><td><code>/*!...*/</code></td><td>Inner block doc comment</td></tr>
|
|||
|
<tr><td><code>/**...*/</code></td><td>Outer block doc comment</td></tr>
|
|||
|
</tbody></table>
|
|||
|
<p>Table B-8 shows symbols that appear in the context of using tuples.</p>
|
|||
|
<p><span class="caption">Table B-8: Tuples</span></p>
|
|||
|
<table><thead><tr><th>Symbol</th><th>Explanation</th></tr></thead><tbody>
|
|||
|
<tr><td><code>()</code></td><td>Empty tuple (aka unit), both literal and type</td></tr>
|
|||
|
<tr><td><code>(expr)</code></td><td>Parenthesized expression</td></tr>
|
|||
|
<tr><td><code>(expr,)</code></td><td>Single-element tuple expression</td></tr>
|
|||
|
<tr><td><code>(type,)</code></td><td>Single-element tuple type</td></tr>
|
|||
|
<tr><td><code>(expr, ...)</code></td><td>Tuple expression</td></tr>
|
|||
|
<tr><td><code>(type, ...)</code></td><td>Tuple type</td></tr>
|
|||
|
<tr><td><code>expr(expr, ...)</code></td><td>Function call expression; also used to initialize tuple <code>struct</code>s and tuple <code>enum</code> variants</td></tr>
|
|||
|
<tr><td><code>ident!(...)</code>, <code>ident!{...}</code>, <code>ident![...]</code></td><td>Macro invocation</td></tr>
|
|||
|
<tr><td><code>expr.0</code>, <code>expr.1</code>, etc.</td><td>Tuple indexing</td></tr>
|
|||
|
</tbody></table>
|
|||
|
<p>Table B-9 shows the contexts in which curly braces are used.</p>
|
|||
|
<p><span class="caption">Table B-9: Curly Brackets</span></p>
|
|||
|
<table><thead><tr><th>Context</th><th>Explanation</th></tr></thead><tbody>
|
|||
|
<tr><td><code>{...}</code></td><td>Block expression</td></tr>
|
|||
|
<tr><td><code>Type {...}</code></td><td><code>struct</code> literal</td></tr>
|
|||
|
</tbody></table>
|
|||
|
<p>Table B-10 shows the contexts in which square brackets are used.</p>
|
|||
|
<p><span class="caption">Table B-10: Square Brackets</span></p>
|
|||
|
<table><thead><tr><th>Context</th><th>Explanation</th></tr></thead><tbody>
|
|||
|
<tr><td><code>[...]</code></td><td>Array literal</td></tr>
|
|||
|
<tr><td><code>[expr; len]</code></td><td>Array literal containing <code>len</code> copies of <code>expr</code></td></tr>
|
|||
|
<tr><td><code>[type; len]</code></td><td>Array type containing <code>len</code> instances of <code>type</code></td></tr>
|
|||
|
<tr><td><code>expr[expr]</code></td><td>Collection indexing. Overloadable (<code>Index</code>, <code>IndexMut</code>)</td></tr>
|
|||
|
<tr><td><code>expr[..]</code>, <code>expr[a..]</code>, <code>expr[..b]</code>, <code>expr[a..b]</code></td><td>Collection indexing pretending to be collection slicing, using <code>Range</code>, <code>RangeFrom</code>, <code>RangeTo</code>, or <code>RangeFull</code> as the “index”</td></tr>
|
|||
|
</tbody></table>
|
|||
|
|
|||
|
</main>
|
|||
|
|
|||
|
<nav class="nav-wrapper" aria-label="Page navigation">
|
|||
|
<!-- Mobile navigation buttons -->
|
|||
|
|
|||
|
<a rel="prev" href="appendix-01-keywords.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
|
|||
|
<i class="fa fa-angle-left"></i>
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<a rel="next" href="appendix-03-derivable-traits.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
|
|||
|
<i class="fa fa-angle-right"></i>
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
<div style="clear: both"></div>
|
|||
|
</nav>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
|
|||
|
<nav class="nav-wide-wrapper" aria-label="Page navigation">
|
|||
|
|
|||
|
<a href="appendix-01-keywords.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
|
|||
|
<i class="fa fa-angle-left"></i>
|
|||
|
</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<a href="appendix-03-derivable-traits.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
|
|||
|
<i class="fa fa-angle-right"></i>
|
|||
|
</a>
|
|||
|
|
|||
|
</nav>
|
|||
|
|
|||
|
</div>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<script type="text/javascript">
|
|||
|
window.playpen_copyable = true;
|
|||
|
</script>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<script src="elasticlunr.min.js" type="text/javascript" charset="utf-8"></script>
|
|||
|
<script src="mark.min.js" type="text/javascript" charset="utf-8"></script>
|
|||
|
<script src="searcher.js" type="text/javascript" charset="utf-8"></script>
|
|||
|
|
|||
|
|
|||
|
<script src="clipboard.min.js" type="text/javascript" charset="utf-8"></script>
|
|||
|
<script src="highlight.js" type="text/javascript" charset="utf-8"></script>
|
|||
|
<script src="book.js" type="text/javascript" charset="utf-8"></script>
|
|||
|
|
|||
|
<!-- Custom JS scripts -->
|
|||
|
|
|||
|
<script type="text/javascript" src="ferris.js"></script>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</body>
|
|||
|
</html>
|