fin*_*oot 1 delphi pascal freepascal lazarus turbo-pascal
在C中,您可以在一行中分配两个变量
b = a = sqrt(10);
Run Code Online (Sandbox Code Playgroud)
在德尔福
b := a := Sqrt(10);
Run Code Online (Sandbox Code Playgroud)
不被允许.
有了Delphi中讨论IfThen的三元运算符?:的"替代" - 相当于C#的三元运算符?总之,IfThen似乎并非绝对必要.
所以也许还有这样的东西:
function AssignAndReturn(var LHS: Integer; RHS: Integer): Integer;
begin
LHS := RHS;
Result := RHS;
end;
(...)
var
a, b: Integer;
begin
b := AssignAndReturn(a, Round(Sqrt(10)));
Run Code Online (Sandbox Code Playgroud)
我不是想"让一切看起来像C".我刚才注意到,有时再次在同一行中"重用"赋值的右侧会很好.(参见Lazarus/Free Pascal:如何改进while循环的编码风格(避免使用无限循环),例如,每次传递都会重新分配布尔表达式.)
赋值语句不是表达式.它不会,也绝不会产生价值.在一个语句中分配多个变量的唯一方法是通过一个函数.
基于这个问题和你之前的问题,我会说你在试图与语言作斗争时是错误的.编码您正在使用的语言.在C中你可能会写
b = a = sqrt(10);
Run Code Online (Sandbox Code Playgroud)
但在Pascal中,语言希望你这样写
a := sqrt(10);
b := a;
Run Code Online (Sandbox Code Playgroud)
这样做吧.不要只是创建晦涩的函数,这样你就可以将它们全部塞进一行.上面的两行不能更清楚地阅读.停止尝试强制其他语言进入Pascal.他们不合适.
| 归档时间: |
|
| 查看次数: |
1156 次 |
| 最近记录: |