渐渐地,我一直在使用更多变体 - 它们在某些地方非常有用,可以承载编译时未知的数据类型.一个有用的值是UnAssigned('我没有给你一个值').我想我很久以前就发现了这个功能:
function DoSomething : variant;
begin
If SomeBoolean then
Result := 4.5
end;
Run Code Online (Sandbox Code Playgroud)
似乎相当于:
function DoSomething : variant;
begin
If SomeBoolean then
Result := 4.5
else
Result := Unassigned; // <<<<
end;
Run Code Online (Sandbox Code Playgroud)
我推测这个推理必须动态创建一个变体,如果SomeBoolean为FALSE,编译器已创建它,但它是'Unassigned'(<> nil?).为了进一步鼓励这种思考,如果省略分配结果,编译器不会报告任何警告.
刚才我发现了令人讨厌的错误,我的第一个例子(其中'结果'未明确默认为'nil')实际上从其他地方返回了一个"旧"值.
在修复变体时,我是否应该总是分配结果(就像我在使用预定义类型时那样)?
可能重复:
Delphi中Result的默认值是什么
与此问题类似,我现在问以下问题.
function Test:Boolean;
begin end;
Run Code Online (Sandbox Code Playgroud)
结果值是否总是保证为假(0)?整数值不是,布尔值也是如此?