Derniers messages sur Zeste de Savoirhttps://zestedesavoir.com/forums/2020-04-20T21:10:53+02:00Les derniers messages parus sur le forum de Zeste de Savoir.RUST: options et |truc| ou bien ||, message #2193242020-04-20T21:10:53+02:00buffalo974/@buffalo974https://zestedesavoir.com/forums/sujet/13948/rust-options-et-truc-ou-bien/?page=1#p219324<p>merci Aabu</p>RUST: options et |truc| ou bien ||, message #2192392020-04-19T09:01:18+02:00Aabu/@Aabuhttps://zestedesavoir.com/forums/sujet/13948/rust-options-et-truc-ou-bien/?page=1#p219239<p>Salut,</p>
<p>Ce sont des <em>fermetures</em>. Dans dans d’autres langages, on parle de fonctions lambda.</p>
<p><code>|v| {Some(v * 2)}</code> est une fonction qui a <code>v</code> associe <code>Some(v * 2)</code>.</p>
<p><code>|| {42}</code> est une fonction sans argument qui renvoie <code>42</code>.</p>
<p>Tu peux aussi jeter un œil au <a href="https://doc.rust-lang.org/book/ch13-01-closures.html">chapitre du bouquin</a> ou à <a href="https://doc.rust-lang.org/stable/rust-by-example/fn/closures.html">cet exemple</a>.</p>RUST: options et |truc| ou bien ||, message #2192372020-04-19T08:32:56+02:00buffalo974/@buffalo974https://zestedesavoir.com/forums/sujet/13948/rust-options-et-truc-ou-bien/?page=1#p219237<p>salut, voici un bout de code que je ne comprends pas bien:</p>
<div class="hljs-code-div"><div class="hljs-line-numbers"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></div><pre><code class="hljs language-text">fn main() {
let x = Some(4);
// calculate 2*x + 3
// we can and_then functions
let result = x.and_then(|v| {
Some(v * 2)
}).and_then(|v| {
Some(v + 3)
});
println!("#1: {}", result.unwrap());
// map_or and map_or_else
println!("#2: {}", result.map_or(42, |v| {
v * v
}));
println!("#3: {}", result.map_or_else(
|| {42},
|v| {v * v}
));
// unwrap_or and unwrap_or_else
println!("#4: {}", result.unwrap_or(42));
println!("#5: {}", result.unwrap_or_else(|| {42}));
println!("#6: {}", None.unwrap_or(42));
}
</code></pre></div>
<p>ce qui donne:</p>
<div class="hljs-code-div"><div class="hljs-line-numbers"><span></span><span></span><span></span><span></span><span></span><span></span></div><pre><code class="hljs language-text">#1: 11
#2: 121
#3: 121
#4: 11
#5: 11
#6: 42
</code></pre></div>
<p>que signifie:</p>
<div class="hljs-code-div"><div class="hljs-line-numbers"><span></span></div><pre><code class="hljs language-text">|v|
</code></pre></div>
<p>et</p>
<div class="hljs-code-div"><div class="hljs-line-numbers"><span></span></div><pre><code class="hljs language-text">|| {42}
</code></pre></div>