名称解析如何在复合"with"语句中起作用?

Joh*_*ica 4 delphi with-statement

Ready在以下代码中测试了哪个实例,为什么?

interface

type
  TObject1 = class
  ...
  public
    property Ready: boolean read FReady write FReady;
  end;

  TObject2 = class
  ...
  public
    property Ready: boolean read FReady write FReady;
  end;

implementation

var
  Object1: TObject1;
  Object2: TObject2;

...

procedure test;
var
  Ready: boolean;
begin
  Ready:= true;
  with Object1, Object2 do begin
    if Ready then ShowMessage('which one?');
  end; {with}
end;
Run Code Online (Sandbox Code Playgroud)

And*_*and 13

最后一个.

with Object1, Object2 do
Run Code Online (Sandbox Code Playgroud)

相当于

with Object1 do
  with Object2 do
Run Code Online (Sandbox Code Playgroud)

Object2将是头号优先事项.

关于此事的官方文件.

  • @David:我使用`with`很多,而且 - 信不信由你 - 从未见过它造成的错误...... (5认同)
  • @Johan:那是个玩笑,对吗?:)如果没有,我不得不问你```和`连接`的类型......还有,'with`非常方便的地方,以及不是......的地方...... (4认同)
  • 名称在嵌套或复合"with"语句中解析,与从多个使用单位解析的名称相同.首先搜索最近提到的单元或对象. (3认同)
  • 调试(在Delphi 7中)在with block中有点烦人,所以我告诉我的团队在我们的代码库中遇到它们时要摆脱它们.我认为原始程序员保存一些键击是有用的,但对于同一代码库上的后续开发人员来说大多是一种痛苦.如果调试器可以跟上,我不会那么介意.不确定是否有任何修复程序(或更高版本的Delphi)修复with块内的调试行为. (3认同)
  • 我几次用WITH射击自己.哈.随着. (2认同)