[唉]Delphi怎么没有三目运算符(也叫三元运算符)
Posted by bianbian on 2008-01-13 08:22
虽然自己写了一个iif函数,还是有问题的:
- function iif(const bool: Boolean; const ifSucc, ifFail: Variant): Variant;
- begin
- if bool then
- Result := ifSucc
- else
- Result := ifFail;
- end;
问题是传进的参数事先是已经被计算出值了,就会导致问题:
1)重复计算。比如:如果bool为真,输出txt,否则在之前加几个空格再输出txt
iif(bool, txt, ' ' + txt);
如果bool为真,按三目运算的规则,' ' + txt 是不会执行到的。不过这里做参数,只能重复计算,效率比if else 低
2)避免不了某些会导致异常的代码
原因还是因为参数会事先计算。比如:如果是目录,输出0,否则输出文件最后修改时间:
iif(Isdir(PathFileName), 0, FileDateToDateTime(FileAge(PathFileName)));
如果PathFileName是目录,FileAge()函数会抛出异常。
按三目运算规则,异常的代码是不应该被执行到的;但这里作参数,一旦是个目录每次必定抛异常,还得改成if else
还没想到好的解决办法,难道用Callbak函数回调?太夸张了点。。。。汗。。。。。
遵守创作共用协议,转载请链接形式注明来自http://bianbian.org 做人要厚道
相关日志
Posted in Delphi, Technology | No Comments »