| ... | @@ -2433,43 +2433,6 @@ test "array initialization with function calls" { | ... | @@ -2433,43 +2433,6 @@ test "array initialization with function calls" { |
| 2433 | {#code_end#} | 2433 | {#code_end#} |
| 2434 | {#see_also|for|Slices#} | 2434 | {#see_also|for|Slices#} |
| 2435 | | 2435 | |
| 2436 | {#header_open|Anonymous List Literals#} | | |
| 2437 | <p>Similar to {#link|Enum Literals#} and {#link|Anonymous Struct Literals#} | | |
| 2438 | the type can be omitted from array literals:</p> | | |
| 2439 | {#code_begin|test|anon_list#} | | |
| 2440 | const std = @import("std"); | | |
| 2441 | const expect = std.testing.expect; | | |
| 2442 | | | |
| 2443 | test "anonymous list literal syntax" { | | |
| 2444 | var array: [4]u8 = .{11, 22, 33, 44}; | | |
| 2445 | try expect(array[0] == 11); | | |
| 2446 | try expect(array[1] == 22); | | |
| 2447 | try expect(array[2] == 33); | | |
| 2448 | try expect(array[3] == 44); | | |
| 2449 | } | | |
| 2450 | {#code_end#} | | |
| 2451 | <p> | | |
| 2452 | If there is no type in the {#link|result location|Result Location Semantics#} then an | | |
| 2453 | anonymous list literal actually turns into a {#link|struct#} with numbered field names: | | |
| 2454 | </p> | | |
| 2455 | {#code_begin|test|infer_list_literal#} | | |
| 2456 | const std = @import("std"); | | |
| 2457 | const expect = std.testing.expect; | | |
| 2458 | | | |
| 2459 | test "fully anonymous list literal" { | | |
| 2460 | try dump(.{ @as(u32, 1234), @as(f64, 12.34), true, "hi"}); | | |
| 2461 | } | | |
| 2462 | | | |
| 2463 | fn dump(args: anytype) !void { | | |
| 2464 | try expect(args.@"0" == 1234); | | |
| 2465 | try expect(args.@"1" == 12.34); | | |
| 2466 | try expect(args.@"2"); | | |
| 2467 | try expect(args.@"3"[0] == 'h'); | | |
| 2468 | try expect(args.@"3"[1] == 'i'); | | |
| 2469 | } | | |
| 2470 | {#code_end#} | | |
| 2471 | {#header_close#} | | |
| 2472 | | | |
| 2473 | {#header_open|Multidimensional Arrays#} | 2436 | {#header_open|Multidimensional Arrays#} |
| 2474 | <p> | 2437 | <p> |
| 2475 | Multidimensional arrays can be created by nesting arrays: | 2438 | Multidimensional arrays can be created by nesting arrays: |
| ... | @@ -3578,15 +3541,21 @@ fn dump(args: anytype) !void { | ... | @@ -3578,15 +3541,21 @@ fn dump(args: anytype) !void { |
| 3578 | try expect(args.s[1] == 'i'); | 3541 | try expect(args.s[1] == 'i'); |
| 3579 | } | 3542 | } |
| 3580 | {#code_end#} | 3543 | {#code_end#} |
| | 3544 | {#header_close#} |
| | 3545 | |
| | 3546 | {#header_open|Tuples#} |
| 3581 | <p> | 3547 | <p> |
| 3582 | Anonymous structs can be created without specifying field names, and are referred to as "tuples". | 3548 | Anonymous structs can be created without specifying field names, and are referred to as "tuples". |
| 3583 | </p> | 3549 | </p> |
| 3584 | <p> | 3550 | <p> |
| 3585 | The fields are implicitly named using numbers starting from 0. Because their names are integers, | 3551 | The fields are implicitly named using numbers starting from 0. Because their names are integers, |
| 3586 | the {#syntax#}@"0"{#endsyntax#} syntax must be used to access them. Names inside {#syntax#}@""{#endsyntax#} are always recognised as {#link|identifiers|Identifiers#}. | 3552 | they cannot be accessed with {#syntax#}.{#endsyntax#} syntax without also wrapping them in |
| | 3553 | {#syntax#}@""{#endsyntax#}. Names inside {#syntax#}@""{#endsyntax#} are always recognised as |
| | 3554 | {#link|identifiers|Identifiers#}. |
| 3587 | </p> | 3555 | </p> |
| 3588 | <p> | 3556 | <p> |
| 3589 | Like arrays, tuples have a .len field, can be indexed and work with the ++ and ** operators. They can also be iterated over with {#link|inline for#}. | 3557 | Like arrays, tuples have a .len field, can be indexed (provided the index is comptime-known) |
| | 3558 | and work with the ++ and ** operators. They can also be iterated over with {#link|inline for#}. |
| 3590 | </p> | 3559 | </p> |
| 3591 | {#code_begin|test|tuple#} | 3560 | {#code_begin|test|tuple#} |
| 3592 | const std = @import("std"); | 3561 | const std = @import("std"); |
| ... | @@ -6488,7 +6457,22 @@ test "coercion between unions and enums" { | ... | @@ -6488,7 +6457,22 @@ test "coercion between unions and enums" { |
| 6488 | {#see_also|union|enum#} | 6457 | {#see_also|union|enum#} |
| 6489 | {#header_close#} | 6458 | {#header_close#} |
| 6490 | {#header_open|Type Coercion: undefined#} | 6459 | {#header_open|Type Coercion: undefined#} |
| 6491 | <p>{#link|undefined#} can be cast to any type.</p> | 6460 | <p>{#link|undefined#} can be coerced to any type.</p> |
| | 6461 | {#header_close#} |
| | 6462 | |
| | 6463 | {#header_open|Type Coercion: tuples to arrays#} |
| | 6464 | <p>{#link|Tuples#} can be coerced to arrays, if all of the fields have the same type.</p> |
| | 6465 | {#code_begin|test|test_coerce_tuples_arrays#} |
| | 6466 | const std = @import("std"); |
| | 6467 | const expect = std.testing.expect; |
| | 6468 | |
| | 6469 | const Tuple = struct{ u8, u8 }; |
| | 6470 | test "coercion from homogenous tuple to array" { |
| | 6471 | 	const tuple: Tuple = .{5, 6}; |
| | 6472 | 	const array: [2]u8 = tuple; |
| | 6473 | 	_ = array; |
| | 6474 | } |
| | 6475 | {#code_end#} |
| 6492 | {#header_close#} | 6476 | {#header_close#} |
| 6493 | {#header_close#} | 6477 | {#header_close#} |
| 6494 | | 6478 | |