创建一个带有 String 参数的结构
Create a struct with String parameter
我只想创建一个带有变量字符串(utf-8 文本)的结构。
const Person = struct {
name: [_]u8,
};
可能吗?或者我必须设置字符串的最大长度(例如 name: [255]u8;
)?当我传递给编译器时,它说:
person.zig:5:12: error: unable to infer array size
name: [_]u8,
无论如何,我想念本机 String 类型,而不必处理字节。有图书馆吗?
您可能正在寻找切片类型:[]u8
或 []const u8
。切片类型包含一个指针和一个长度,因此该结构实际上并不直接保存字符串的内存,而是保存在其他地方。 https://ziglang.org/documentation/0.9.1/#Slices
const Person = struct {
name: []const u8,
};
Anyway I miss native String type instead of having to handle with bytes. Is there any library for that?
有一些用于 zig 的字符串库,但这取决于您正在寻找的具体功能。如果您正在寻找字符串连接和格式化,您可以使用 zig 的内置 ArrayList
const std = @import("std");
const Person = struct {
name: std.ArrayList(u8),
};
test "person" {
const allocator = std.testing.allocator;
var person: Person = .{
.name = std.ArrayList(u8).init(allocator),
};
defer person.name.deinit();
try person.name.appendSlice("First ");
try person.name.appendSlice("Last");
try person.name.writer().print(". Formatted string: {s}", .{"demo"});
try std.testing.expectEqualSlices(u8, "First Last. Formatted string: demo", person.name.items);
}
如果您正在寻找像字符串规范化这样的 unicode 函数,您可以使用像 Ziglyph
这样的库
我只想创建一个带有变量字符串(utf-8 文本)的结构。
const Person = struct {
name: [_]u8,
};
可能吗?或者我必须设置字符串的最大长度(例如 name: [255]u8;
)?当我传递给编译器时,它说:
person.zig:5:12: error: unable to infer array size
name: [_]u8,
无论如何,我想念本机 String 类型,而不必处理字节。有图书馆吗?
您可能正在寻找切片类型:[]u8
或 []const u8
。切片类型包含一个指针和一个长度,因此该结构实际上并不直接保存字符串的内存,而是保存在其他地方。 https://ziglang.org/documentation/0.9.1/#Slices
const Person = struct {
name: []const u8,
};
Anyway I miss native String type instead of having to handle with bytes. Is there any library for that?
有一些用于 zig 的字符串库,但这取决于您正在寻找的具体功能。如果您正在寻找字符串连接和格式化,您可以使用 zig 的内置 ArrayList
const std = @import("std");
const Person = struct {
name: std.ArrayList(u8),
};
test "person" {
const allocator = std.testing.allocator;
var person: Person = .{
.name = std.ArrayList(u8).init(allocator),
};
defer person.name.deinit();
try person.name.appendSlice("First ");
try person.name.appendSlice("Last");
try person.name.writer().print(". Formatted string: {s}", .{"demo"});
try std.testing.expectEqualSlices(u8, "First Last. Formatted string: demo", person.name.items);
}
如果您正在寻找像字符串规范化这样的 unicode 函数,您可以使用像 Ziglyph
这样的库