为什么将 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 的伪记录布尔值)。
有一些基于泛型的解决方案尝试实现可空类型,但我没有使用过它们,而且它们不是标准分发的一部分。
在我下面的例子中,在读取文件的第一个字符之前,我不希望将 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 的伪记录布尔值)。
有一些基于泛型的解决方案尝试实现可空类型,但我没有使用过它们,而且它们不是标准分发的一部分。