mirror of
https://codeberg.org/ziglang/zig.git
synced 2025-12-06 13:54:21 +00:00
Merge pull request #11664 from vincenzopalazzo/macros/docs
docs: add missed docs for some language feature like `defer` and `errdefer`
This commit is contained in:
commit
1d041d3a10
1 changed files with 28 additions and 1 deletions
|
|
@ -4862,14 +4862,41 @@ fn deferErrorExample(is_error: bool) !void {
|
||||||
print("encountered an error!\n", .{});
|
print("encountered an error!\n", .{});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// inside a defer method the return statement
|
||||||
|
// is not allowed.
|
||||||
|
// The following lines produce the following
|
||||||
|
// error if uncomment
|
||||||
|
// ```
|
||||||
|
// defer.zig:73:9: error: cannot return from defer expression
|
||||||
|
// return error.DeferError;
|
||||||
|
// ```
|
||||||
|
//
|
||||||
|
//defer {
|
||||||
|
// return error.DeferError;
|
||||||
|
//}
|
||||||
|
|
||||||
if (is_error) {
|
if (is_error) {
|
||||||
return error.DeferError;
|
return error.DeferError;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// The errdefer keyword support also an alternative syntax to capture the
|
||||||
|
// error generated in case of one error.
|
||||||
|
//
|
||||||
|
// This is useful when during the clean up after an error additional
|
||||||
|
// message want to be printed.
|
||||||
|
fn deferErrorCaptureExample() !void {
|
||||||
|
errdefer |err| {
|
||||||
|
std.debug.print("the error is {s}\n", .{@errorName(err)});
|
||||||
|
}
|
||||||
|
|
||||||
|
return error.DeferError;
|
||||||
|
}
|
||||||
|
|
||||||
test "errdefer unwinding" {
|
test "errdefer unwinding" {
|
||||||
deferErrorExample(false) catch {};
|
deferErrorExample(false) catch {};
|
||||||
deferErrorExample(true) catch {};
|
deferErrorExample(true) catch {};
|
||||||
|
deferErrorCaptureExample() catch {};
|
||||||
}
|
}
|
||||||
{#code_end#}
|
{#code_end#}
|
||||||
{#see_also|Errors#}
|
{#see_also|Errors#}
|
||||||
|
|
@ -11930,7 +11957,7 @@ fn readU32Be() u32 {}
|
||||||
<pre>{#syntax#}errdefer{#endsyntax#}</pre>
|
<pre>{#syntax#}errdefer{#endsyntax#}</pre>
|
||||||
</th>
|
</th>
|
||||||
<td>
|
<td>
|
||||||
{#syntax#}errdefer{#endsyntax#} will execute an expression when control flow leaves the current block if the function returns an error.
|
{#syntax#}errdefer{#endsyntax#} will execute an expression when control flow leaves the current block if the function returns an error, the errdefer expression can capture the unwrapped value.
|
||||||
<ul>
|
<ul>
|
||||||
<li>See also {#link|errdefer#}</li>
|
<li>See also {#link|errdefer#}</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue