是否可以将语句转换为表达式?

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循环的编码风格(避免使用无限循环),例如,每次传递都会重新分配布尔表达式.)

Dav*_*nan 9

赋值语句不是表达式.它不会,也绝不会产生价值.在一个语句中分配多个变量的唯一方法是通过一个函数.


基于这个问题和你之前的问题,我会说你在试图与语言作斗争时是错误的.编码您正在使用的语言.在C中你可能会写

b = a = sqrt(10);
Run Code Online (Sandbox Code Playgroud)

但在Pascal中,语言希望你这样写

a := sqrt(10);
b := a;
Run Code Online (Sandbox Code Playgroud)

这样做吧.不要只是创建晦涩的函数,这样你就可以将它们全部塞进一行.上面的两行不能更清楚地阅读.停止尝试强制其他语言进入Pascal.他们不合适.