简短的回答是:
不。你想要什么是不可能的。并且可以说在 Delphi 中几乎没有任何好处。
首先,让我们讨论一个更实际的例子。坦率地说,a = b = f(x);
这是一个相当糟糕的例子。
- 您很少会随意将相同的值分配给 2 个变量。
- 上面的操作顺序必须打破从左到右的约定,否则它将首先
a = b
解决? = f(x)
。
- 所以没有什么理由支持这一点
b = f(x); a = b;
。
- 基本上它有利于字节数(代码高尔夫)而不是可读性。
因此,让我们考虑以下更实际的场景:
//Option 1
if ((b = f(x)) > 42)
//use b
没有与上述等效的 Delphi,但它至少具有可读性/可维护性:
//Option 2
b := f(x);
if (b > 42) then
//use b
还有另一种选择可以考虑;特别是如果选项 1 位于更大功能的中间。请记住,小函数更易于维护,并且更易于编译器优化。所以考虑:
//Option 3
...
ProcessRule42(f(x));
...
//Where Rule42 is is implemented as:
procedure ProcessRule42(b: Integer);
begin
if (b > 42) then
//use b
end;
由于无法编写,Delphi 似乎并没有真正受到影响: if (b := f(x)) > 42 then //use b
.
选项 1 有什么真正的好处吗?
如果选项 2 至少一样好,为什么还要为选项 1 烦恼。当您考虑范围规则时,就会看到好处。
//b does not exist
if ((var b = f(x)) > 42) {
//use b
}
//b does not exist
// Using the Delphi approach, this becomes:
//b does not exist
var b = f(x);
if (b > 42) {
//use b
}
//b still exists
Delphi 根本没有相同的范围问题。Delphi 变量都在方法的开头声明,并且可用于整个方法。
结论
这让我们回到了其他人一直试图解释的问题。Delphi 是一种不同的语言,对某些问题的处理方法略有不同。虽然我赞赏您检查其他选项并考虑可以从其他语言中借用哪些概念:但要小心尝试将某些概念强加到它们不属于的地方。
如果你破坏了太多的 Delphi 范式,你的代码可能会变得对Delphi 程序员来说不必要地难以维护。