在Zig中,
const
适用于声明中的下一个内容。
因此,
[_][] u8
是一个切片数组,而
[_][] const u8
是一个
const u8
切片数组。您的字符串字面量是
*const [_:0]u8
(指向的指针;这就是您的错误消息中
*const [6:0] u8
的来源),Zig可以将其强制转换为
const u8
切片。
以下是一些示例及其可变性:
[_][]u8
- 所有内容都是可变的。
var move: [3][]u8 = undefined;
var ziga: [4]u8 = [_]u8{ 'z', 'i', 'g', 's' };
const zigs: []u8 = ziga[0..];
move[0] = zigs;
move[0][1] = 'a';
< p >
[_][] const u8
- 这个切片是可变的,但其中的内容不可变。
var belong_to_us = [_][]const u8{ "all", "your", "base", "are" };
var bomb = [_][]const u8{ "someone", "set", "up", "us" };
belong_to_us = bomb;
但是
bomb[0][0] = 'x'; // error: cannot assign to constant
const [_][] const u8
- 这整个东西是不可变的。
const signal: [3][]const u8 = [_][]const u8{ "we", "get", "signal" };
const go: [3][]const u8 = [_][]const u8{ "move", "every", "zig" };
signal = go;
然而,
const [_][]u8
- 这是一个字节片段的常量数组。
var what: [4]u8 = [_]u8{ 'w', 'h', 'a', 't' };
const signal: [3][]u8 = [_][]u8{ zigs, what[0..], zigs };
signal[0][1] = 'f';
signal[1] = zigs;
那个最后的是一个可变切片的常量数组。
var
可以从你的描述中推断出类型,但数组的描述必须与数组字面量匹配,这意味着必须使用const
字符串。将const
放在左侧只是表示你不会改变n
,但仍然描述了一个非常量项数组,并分配一个由常量字符串组成的数组。 - John Bayko