zig 中 `std.io.getStdOut().writer();` 的类型是什么?

Emi*_*zer 5 writer zig

我无法使用 zig 中的标准输出初始化全局变量:

var out = std.io.getStdOut().writer();
Run Code Online (Sandbox Code Playgroud)

然后我尝试在 中初始化fn main并将全局变量声明为可选(由 null 初始化)。

我的问题是我不知道哪种类型std.io.getStdOut().writer();

我尝试过类似的东西:

var out: std.fs.Writer? = null
//...
fn main() !void {
   out = std.io.getStdOut().writer();
   //...
   out.print("ok: {}", "ok");
}
Run Code Online (Sandbox Code Playgroud)

我也尝试过反思:

var stdout: @typeInfo(@TypeOf(std.io.getStdOut().writer())).Fn.return_type.? = null;
Run Code Online (Sandbox Code Playgroud)

我需要知道如何声明一个变量或一个返回 Writer 的函数(即内部具有常用打印函数的东西)。

已编辑

使用 zig 版本 0.12.0-dev.1150+3c22cecee 和 0.11.0 并列两次

writer.zig 文件包含:

const std = @import("std");

var out = std.io.getStdOut().writer();

pub fn main() anyerror!void {
    try out.print("{any}\n", .{@TypeOf(out)});
}
Run Code Online (Sandbox Code Playgroud)

我收到错误:无法评估 comptime 表达式

zig build-exe writer.zig && writer.exe                           
C:\bin\zig\lib\std\os\windows.zig:1944:28: error: unable to evaluate comptime expression
                break :blk asm volatile (
                           ^~~
C:\bin\zig\lib\std\os\windows.zig:1959:15: note: called from here
    return teb().ProcessEnvironmentBlock;
           ~~~^~
C:\bin\zig\lib\std\io.zig:37:30: note: called from here
        return os.windows.peb().ProcessParameters.hStdOutput;
               ~~~~~~~~~~~~~~^~
C:\bin\zig\lib\std\io.zig:51:34: note: called from here
        .handle = getStdOutHandle(),
                  ~~~~~~~~~~~~~~~^~
writer.zig:3:27: note: called from here
var out = std.io.getStdOut().writer();
          ~~~~~~~~~~~~~~~~^~
referenced by:
    main: writer.zig:6:9
    callMain: C:\bin\zig\lib\std\start.zig:583:32
    remaining reference traces hidden; use '-freference-trace' to see all reference traces
Run Code Online (Sandbox Code Playgroud)

bor*_*yer 0

它适用于我的 Ubuntu/Linux 机器。我认为这是一个特定于 Windows 的错误:

% cat test.zig

const std = @import("std");

var out = std.io.getStdOut().writer();

pub fn main() anyerror!void {
    try out.print("{any}\n", .{@TypeOf(out)});
}

% zig build-exe test.zig && ./test
io.writer.Writer(fs.file.File,error{AccessDenied,Unexpected,DiskQuota,FileTooBig,InputOutput,NoSpaceLeft,DeviceBusy,InvalidArgument,BrokenPipe,SystemResources,OperationAborted,NotOpenForWriting,LockViolation,WouldBlock,ConnectionResetByPeer},(function 'write'))


Run Code Online (Sandbox Code Playgroud)

最后一行给出了返回的类型。