在Zig中,`std.io.getStdOut().writer()`的类型是什么?

3
我无法在Zig中使用stdout来初始化全局变量。
var out = std.io.getStdOut().writer();

然后我尝试在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");
}

我也尝试了反思。
var stdout: @typeInfo(@TypeOf(std.io.getStdOut().writer())).Fn.return_type.? = null;

我需要知道如何声明一个返回 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)});
}

我收到一个错误消息:“无法评估编译时表达式”。
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

1个回答

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'))



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

你说得对。我必须提供一个可执行的示例,还要包括编译器的版本信息。我是在 Windows 11 上运行的。 - undefined
我的问题是关于**std.io.getStdOut().writer()**的类型是什么,因为我想创建一个函数,可以返回它或者最初为null的变量。我需要这个作为设置初始值的改进(这是我在Windows上无法做到的)。 - undefined
好的,你在我举例的最后一行中已经有了类型(虽然它并没有解决这个错误,但至少你有了这个信息)。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接