簡體   English   中英

Zig 中的全局“comptime var”

[英]Global `comptime var` in Zig

在 Zig 中,我可以毫無問題地做到這一點:

fn foo() void {
    comptime var num: comptime_int = 0;
    num += 1;
}

但是當我嘗試在函數外聲明變量時,我得到一個編譯錯誤:

comptime var num: comptime_int = 0;

fn foo() void {
    num += 1;
}

fn bar() void {
    num += 2;
}
error: expected block or field, found 'var'

Zig 版本:0.9.0-dev.453+7ef854682

使用zorrow 中使用的方法。 它在一個函數中定義變量(一個塊也可以),然后它返回一個帶有訪問它的函數的結構。

您可以創建一個定義getset函數的結構:

const num = block_name: {
    comptime var self: comptime_int = 0;

    const result = struct {
        fn get() comptime_int {
            return self;
        }

        fn increment(amount: comptime_int) void {
            self += amount;
        }
    };

    break :block_name result;
};

fn foo() void {
    num.increment(1);
}

fn bar() void {
    num.increment(2);
}

將來,您將可以使用帶有指向可變值的指針的const ,編譯器將不再允許使用上述方法: https : //github.com/ziglang/zig/issues/7396

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM