Sophie

Sophie

distrib > Mageia > 6 > x86_64 > media > core-updates > by-pkgid > e50df336eb49b92dbadf6dedc48b7934 > files > 13853

rust-doc-1.27.0-1.mga6.x86_64.rpm

<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="API documentation for the Rust `catch_unwind` fn in crate `std`."><meta name="keywords" content="rust, rustlang, rust-lang, catch_unwind"><title>std::panic::catch_unwind - Rust</title><link rel="stylesheet" type="text/css" href="../../normalize.css"><link rel="stylesheet" type="text/css" href="../../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" type="text/css" href="../../dark.css"><link rel="stylesheet" type="text/css" href="../../light.css" id="themeStyle"><script src="../../storage.js"></script><link rel="shortcut icon" href="https://doc.rust-lang.org/favicon.ico"></head><body class="rustdoc fn"><!--[if lte IE 8]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"><div class="sidebar-menu">&#9776;</div><a href='../../std/index.html'><img src='https://www.rust-lang.org/logos/rust-logo-128x128-blk-v2.png' alt='logo' width='100'></a><div class="sidebar-elems"><p class='location'><a href='../index.html'>std</a>::<wbr><a href='index.html'>panic</a></p><script>window.sidebarCurrent = {name: 'catch_unwind', ty: 'fn', relpath: ''};</script><script defer src="sidebar-items.js"></script></div></nav><div class="theme-picker"><button id="theme-picker" aria-label="Pick another theme!"><img src="../../brush.svg" width="18" alt="Pick another theme!"></button><div id="theme-choices"></div></div><script src="../../theme.js"></script><nav class="sub"><form class="search-form js-only"><div class="search-container"><input class="search-input" name="search" autocomplete="off" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><a id="settings-menu" href="../../settings.html"><img src="../../wheel.svg" width="18" alt="Change settings"></a></div></form></nav><section id="main" class="content"><h1 class='fqn'><span class='in-band'>Function <a href='../index.html'>std</a>::<wbr><a href='index.html'>panic</a>::<wbr><a class="fn" href=''>catch_unwind</a></span><span class='out-of-band'><span class='since' title='Stable since Rust version 1.9.0'>1.9.0</span><span id='render-detail'><a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class='inner'>&#x2212;</span>]</a></span><a class='srclink' href='../../src/std/panic.rs.html#372-376' title='goto source code'>[src]</a></span></h1><pre class='rust fn'>pub fn catch_unwind&lt;F:&nbsp;<a class="trait" href="../../std/ops/trait.FnOnce.html" title="trait std::ops::FnOnce">FnOnce</a>() -&gt; R + <a class="trait" href="../../std/panic/trait.UnwindSafe.html" title="trait std::panic::UnwindSafe">UnwindSafe</a>, R&gt;(f: F) -&gt; <a class="type" href="../../std/thread/type.Result.html" title="type std::thread::Result">Result</a>&lt;R&gt;</pre><div class='docblock'><p>Invokes a closure, capturing the cause of an unwinding panic if one occurs.</p>
<p>This function will return <code>Ok</code> with the closure's result if the closure
does not panic, and will return <code>Err(cause)</code> if the closure panics. The
<code>cause</code> returned is the object with which panic was originally invoked.</p>
<p>It is currently undefined behavior to unwind from Rust code into foreign
code, so this function is particularly useful when Rust is called from
another language (normally C). This can run arbitrary Rust code, capturing a
panic and allowing a graceful handling of the error.</p>
<p>It is <strong>not</strong> recommended to use this function for a general try/catch
mechanism. The <a href="../result/enum.Result.html"><code>Result</code></a> type is more appropriate to use for functions that
can fail on a regular basis. Additionally, this function is not guaranteed
to catch all panics, see the &quot;Notes&quot; section below.</p>
<p>The closure provided is required to adhere to the <a href="./trait.UnwindSafe.html"><code>UnwindSafe</code></a> trait to ensure
that all captured variables are safe to cross this boundary. The purpose of
this bound is to encode the concept of <a href="https://github.com/rust-lang/rfcs/blob/master/text/1236-stabilize-catch-panic.md">exception safety</a> in the type
system. Most usage of this function should not need to worry about this
bound as programs are naturally unwind safe without <code>unsafe</code> code. If it
becomes a problem the <a href="./struct.AssertUnwindSafe.html"><code>AssertUnwindSafe</code></a> wrapper struct can be used to quickly
assert that the usage here is indeed unwind safe.</p>
<h1 id="notes" class="section-header"><a href="#notes">Notes</a></h1>
<p>Note that this function <strong>may not catch all panics</strong> in Rust. A panic in
Rust is not always implemented via unwinding, but can be implemented by
aborting the process as well. This function <em>only</em> catches unwinding panics,
not those that abort the process.</p>
<h1 id="examples" class="section-header"><a href="#examples">Examples</a></h1>
<pre class="rust rust-example-rendered">
<span class="kw">use</span> <span class="ident">std</span>::<span class="ident">panic</span>;

<span class="kw">let</span> <span class="ident">result</span> <span class="op">=</span> <span class="ident">panic</span>::<span class="ident">catch_unwind</span>(<span class="op">||</span> {
    <span class="macro">println</span><span class="macro">!</span>(<span class="string">&quot;hello!&quot;</span>);
});
<span class="macro">assert</span><span class="macro">!</span>(<span class="ident">result</span>.<span class="ident">is_ok</span>());

<span class="kw">let</span> <span class="ident">result</span> <span class="op">=</span> <span class="ident">panic</span>::<span class="ident">catch_unwind</span>(<span class="op">||</span> {
    <span class="macro">panic</span><span class="macro">!</span>(<span class="string">&quot;oh no!&quot;</span>);
});
<span class="macro">assert</span><span class="macro">!</span>(<span class="ident">result</span>.<span class="ident">is_err</span>());<a class="test-arrow" target="_blank" href="https://play.rust-lang.org/?code=%23!%5Ballow(unused)%5D%0Afn%20main()%20%7B%0Ause%20std%3A%3Apanic%3B%0A%0Alet%20result%20%3D%20panic%3A%3Acatch_unwind(%7C%7C%20%7B%0A%20%20%20%20println!(%22hello!%22)%3B%0A%7D)%3B%0Aassert!(result.is_ok())%3B%0A%0Alet%20result%20%3D%20panic%3A%3Acatch_unwind(%7C%7C%20%7B%0A%20%20%20%20panic!(%22oh%20no!%22)%3B%0A%7D)%3B%0Aassert!(result.is_err())%3B%0A%7D">Run</a></pre>
</div></section><section id="search" class="content hidden"></section><section class="footer"></section><aside id="help" class="hidden"><div><h1 class="hidden">Help</h1><div class="shortcuts"><h2>Keyboard Shortcuts</h2><dl><dt><kbd>?</kbd></dt><dd>Show this help dialog</dd><dt><kbd>S</kbd></dt><dd>Focus the search field</dd><dt><kbd>↑</kbd></dt><dd>Move up in search results</dd><dt><kbd>↓</kbd></dt><dd>Move down in search results</dd><dt><kbd>↹</kbd></dt><dd>Switch tab</dd><dt><kbd>&#9166;</kbd></dt><dd>Go to active search result</dd><dt><kbd>+</kbd></dt><dd>Expand all sections</dd><dt><kbd>-</kbd></dt><dd>Collapse all sections</dd></dl></div><div class="infos"><h2>Search Tricks</h2><p>Prefix searches with a type followed by a colon (e.g. <code>fn:</code>) to restrict the search to a given type.</p><p>Accepted types are: <code>fn</code>, <code>mod</code>, <code>struct</code>, <code>enum</code>, <code>trait</code>, <code>type</code>, <code>macro</code>, and <code>const</code>.</p><p>Search functions by type signature (e.g. <code>vec -> usize</code> or <code>* -> vec</code>)</p><p>Search multiple things at once by splitting your query with comma (e.g. <code>str,u8</code> or <code>String,struct:Vec,test</code>)</p></div></div></aside><script>window.rootPath = "../../";window.currentCrate = "std";</script><script src="../../aliases.js"></script><script src="../../main.js"></script><script defer src="../../search-index.js"></script></body></html>