zig @this()

22 阅读1分钟

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();