我在delphi中编写了以下代码,但它无法正常工作。
这段代码有问题吗?
返回此变体的函数:
function DoRun(a:String;b:boolean):variant;
Begin
result:=a;
End;
这是使用上面的功能是故障代码:
procedure TForm2.BitBtn1Click(Sender: TObject);
var
a,b,c:Integer;
begin
a:=10;
b:=20;
c:=30;
if (a=1) and (b=2) and (c=3) and DoRun('',true)='0' then
showmessage('True');
end;
结果:' True'消息见。
"如果"行代码结束括号"(DoRun('',true)=' 0')"通过正确的运作工作:
procedure TForm2.BitBtn1Click(Sender: TObject);
var
a,b,c:Integer;
begin
a:=10;
b:=20;
c:=30;
if (a=1) and (b=2) and (c=3) and (DoRun('',true)='0') then
showmessage('True');
end;
请帮助确定问题并告诉我如何使此代码按预期工作。
答案 0 :(得分:4)
第一段代码肯定是错误的。你的条件是
if ( (a=1) and (b=2) and (c=3) and DoRun('',true) ) = '0'
等于
if Variant(false) = Variant('0') then
ShowMessage('True');
显然对于变体类型false='0'
第二段代码按预期工作。第二个比较是OK,只有布尔比较,DoRun函数没有执行,比较结果是false
答案 1 :(得分:1)
所有
if ( (a=1) and (b=2) and (c=3) and DoRun('',true) ) = '0'
不一样
if ( DoRun('',true) and (a=1) and (b=2) and (c=3) ) = '0'
这不运行!!运行时错误"无效参数"!
这不是你给我反面的例子吗? :) :)你有一个逻辑错误!所以,你的答案与主题无关。
编译器从左到右解释。编译器" DoRun()"错误条件是由算法引起的,不能视为括号。如果" DoRun()"条件最重要的条件我们得到这个错误" RTE"这就是你会看到的原因。 " 括号"开头的条件如果您使用,您将看到没有编译。在这种情况下,编译器显然不是最终条件,而允许左侧最右侧的括号不允许。
是的,编译器错误地解释了!但是编译器会这样解释它!