authorgravatar for gordoncassie@gmail.comGordon Cassie <gordoncassie@gmail.com> 2023-12-07 13:51:03-08:00
committergravatar for gordoncassie@gmail.comGordon Cassie <gordoncassie@gmail.com> 2023-12-07 13:51:03-08:00
logef93a36cd5b783d50b595f5f7eea7422649081a7
tree5c47c4991f433a36f94eb074ed89f996827d20e0
parentcce820f93d0648d39f862a5784850580cb2cf4bb

Add comment. Split up if docs for optionals.


1 files changed, 48 insertions(+), 40 deletions(-)

doc/langref.html.in+48-40
...@@ -4628,6 +4628,7 @@ test "while null capture" {...@@ -4628,6 +4628,7 @@ test "while null capture" {
4628 }4628 }
4629 try expect(sum1 == 3);4629 try expect(sum1 == 3);
46304630
4631 // null capture with an else block
4631 var sum2: u32 = 0;4632 var sum2: u32 = 0;
4632 numbers_left = 3;4633 numbers_left = 3;
4633 while (eventuallyNullSequence()) |value| {4634 while (eventuallyNullSequence()) |value| {
...@@ -4636,6 +4637,7 @@ test "while null capture" {...@@ -4636,6 +4637,7 @@ test "while null capture" {
4636 try expect(sum2 == 3);4637 try expect(sum2 == 3);
4637 }4638 }
46384639
4640 // null capture with a continue expression
4639 var i: u32 = 0;4641 var i: u32 = 0;
4640 var sum3: u32 = 0;4642 var sum3: u32 = 0;
4641 numbers_left = 3;4643 numbers_left = 3;
...@@ -4923,87 +4925,92 @@ test "if boolean" {...@@ -4923,87 +4925,92 @@ test "if boolean" {
4923 }4925 }
4924}4926}
49254927
4926test "if optional" {4928test "if error union" {
4927 // If expressions test for null.4929 // If expressions test for errors.
4930 // Note the |err| capture on the else.
49284931
4929 const a: ?u32 = 0;4932 const a: anyerror!u32 = 0;
4930 if (a) |value| {4933 if (a) |value| {
4931 try expect(value == 0);4934 try expect(value == 0);
4932 } else {4935 } else |err| {
4936 _ = err;
4933 unreachable;4937 unreachable;
4934 }4938 }
49354939
4936 const b: ?u32 = null;4940 const b: anyerror!u32 = error.BadValue;
4937 if (b) |_| {4941 if (b) |value| {
4942 _ = value;
4938 unreachable;4943 unreachable;
4939 } else {4944 } else |err| {
4940 try expect(true);4945 try expect(err == error.BadValue);
4941 }4946 }
49424947
4943 // The else is not required.4948 // The else and |err| capture is strictly required.
4944 if (a) |value| {4949 if (a) |value| {
4945 try expect(value == 0);4950 try expect(value == 0);
4946 }4951 } else |_| {}
49474952
4948 // To test against null only, use the binary equality operator.4953 // To check only the error value, use an empty block expression.
4949 if (b == null) {4954 if (b) |_| {} else |err| {
4950 try expect(true);4955 try expect(err == error.BadValue);
4951 }4956 }
49524957
4953 // Access the value by reference using a pointer capture.4958 // Access the value by reference using a pointer capture.
4954 var c: ?u32 = 3;4959 var c: anyerror!u32 = 3;
4955 if (c) |*value| {4960 if (c) |*value| {
4956 value.* = 2;4961 value.* = 9;
4962 } else |_| {
4963 unreachable;
4957 }4964 }
49584965
4959 if (c) |value| {4966 if (c) |value| {
4960 try expect(value == 2);4967 try expect(value == 9);
4961 } else {4968 } else |_| {
4962 unreachable;4969 unreachable;
4963 }4970 }
4964}4971}
4972 {#code_end#}
4973 {#header_open|if with Optionals#}
49654974
4966test "if error union" {4975 {#code_begin|test|test_if_optionals#}
4967 // If expressions test for errors.4976const expect = @import("std").testing.expect;
4968 // Note the |err| capture on the else.
49694977
4970 const a: anyerror!u32 = 0;4978test "if optional" {
4979 // If expressions test for null.
4980
4981 const a: ?u32 = 0;
4971 if (a) |value| {4982 if (a) |value| {
4972 try expect(value == 0);4983 try expect(value == 0);
4973 } else |err| {4984 } else {
4974 _ = err;
4975 unreachable;4985 unreachable;
4976 }4986 }
49774987
4978 const b: anyerror!u32 = error.BadValue;4988 const b: ?u32 = null;
4979 if (b) |value| {4989 if (b) |_| {
4980 _ = value;
4981 unreachable;4990 unreachable;
4982 } else |err| {4991 } else {
4983 try expect(err == error.BadValue);4992 try expect(true);
4984 }4993 }
49854994
4986 // The else and |err| capture is strictly required.4995 // The else is not required.
4987 if (a) |value| {4996 if (a) |value| {
4988 try expect(value == 0);4997 try expect(value == 0);
4989 } else |_| {}4998 }
49904999
4991 // To check only the error value, use an empty block expression.5000 // To test against null only, use the binary equality operator.
4992 if (b) |_| {} else |err| {5001 if (b == null) {
4993 try expect(err == error.BadValue);5002 try expect(true);
4994 }5003 }
49955004
4996 // Access the value by reference using a pointer capture.5005 // Access the value by reference using a pointer capture.
4997 var c: anyerror!u32 = 3;5006 var c: ?u32 = 3;
4998 if (c) |*value| {5007 if (c) |*value| {
4999 value.* = 9;5008 value.* = 2;
5000 } else |_| {
5001 unreachable;
5002 }5009 }
50035010
5004 if (c) |value| {5011 if (c) |value| {
5005 try expect(value == 9);5012 try expect(value == 2);
5006 } else |_| {5013 } else {
5007 unreachable;5014 unreachable;
5008 }5015 }
5009}5016}
...@@ -5052,6 +5059,7 @@ test "if error union with optional" {...@@ -5052,6 +5059,7 @@ test "if error union with optional" {
5052 }5059 }
5053}5060}
5054 {#code_end#}5061 {#code_end#}
5062 {#header_close#}
5055 {#see_also|Optionals|Errors#}5063 {#see_also|Optionals|Errors#}
5056 {#header_close#}5064 {#header_close#}
5057 {#header_open|defer#}5065 {#header_open|defer#}
...@@ -6338,7 +6346,7 @@ test "optional pointers" {...@@ -6338,7 +6346,7 @@ test "optional pointers" {
6338 {#code_end#}6346 {#code_end#}
6339 {#header_close#}6347 {#header_close#}
63406348
6341 {#see_also|while with Optionals|if#}6349 {#see_also|while with Optionals|if with Optionals#}
6342 {#header_close#}6350 {#header_close#}
6343 {#header_open|Casting#}6351 {#header_open|Casting#}
6344 <p>6352 <p>