Zig中@This()内置函数返回当前定义的结构体类型。 通常用于结构体内部需要返回该结构体的函数的返回类型。
const std = @import("std");
const MyStruct = struct {
data: i32,
// 构造函数:使用 @This() 作为返回类型
// 这样做的好处是:如果你重命名了结构体(比如改成 MyStructV2),
// 这里的返回类型会自动更新,不需要手动修改。
fn init(value: i32) @This() {
return @This(){ // 也可以用 @This() 来实例化
.data = value,
};
}
// ❌ 不推荐:硬编码类型名
// 如果你把 struct MyStruct 改成 struct YourStruct,
// 下面这行代码就会报错,需要手动去改。
// fn initBad(value: i32) MyStruct { ... }
};
pub fn main() void {
var instance = MyStruct.init(42);
std.debug.print("Data: {}", .{instance.data});
}
还有一种广泛使用的情况,对于泛型和名字很长的类型,通常会有如下代码定义,用大写Self去指代当前类型。
const Self = @This();