为什么将 Char 变量设置为 nil 会导致编译失败?

Why does setting a Char variable to nil cause compilation to fail?

在我下面的例子中,在读取文件的第一个字符之前,我不希望将 c 分配给任何东西。

我尝试将 Char 变量 c 设置为 nil (c := nil;) 但编译失败。我尝试了如下所示的空字符串,但仍然无效。

当我将它设置为空时它起作用 space,但我必须这样做似乎很奇怪。

有没有办法像在其他语言中那样将 Char 初始化为 null 之类的值?

program CSVToMarkdown;
 
{$mode objfpc}{$H+}{$J-}

uses
    Sysutils;

var
    f: File of Char;
    c: Char;

begin
    Assign(f, 'test.csv');
    Reset(f);
    c := '';

    while not Eof(f) do
    begin
        Read(f, c);
        Write(c);
    end;

     Close(f);

    ReadLn;
end.

NIL 通常是指针或引用类型(接口、class、动态数组)的值。

非引用类型没有 NIL 值,char 类型可以取从 #0 到 #255 的值,并且所有这些都是有效的,但有时在与其他语言交互时 #0 被解释为字符串结尾。

如果您指的是像 Java 或 .NET 中的可空类型,则没有对它们的默认支持,因为它们的缺点是类型变得比需要的更大(现在变成添加了 NULL 的伪记录布尔值)。

有一些基于泛型的解决方案尝试实现可空类型,但我没有使用过它们,而且它们不是标准分发的一部分。