【问题标题】:Using Delphi, unable to use anonymus type as a type of a record?使用Delphi,无法使用匿名类型作为记录类型?
【发布时间】:2011-10-16 23:37:01
【问题描述】:

我不明白为什么下面的小控制台应用程序无法编译:

program Project1;

type
  TProc = reference to procedure;

  TMyRec = record
    Proc: TProc;
  end;

var
  myProc: TProc;
  myRec: TMyRec;

begin
  myProc := procedure begin writeln; end;
  myProc; // compiles fine
  myRec.Proc := procedure begin writeln; end;
  myRec.Proc; //E2014 Statement exptected, but expression of type 'TProc' found
end.

【问题讨论】:

    标签: delphi anonymous-methods


    【解决方案1】:

    您必须添加括号以表明您正在调用该过程;即,

    myRec.Proc();
    

    【讨论】:

    • 可以在没有括号的情况下调用普通的旧帕斯卡过程,我猜过程引用是不同的。
    • 谢谢,我没想到会这样。这个要求的原因可能是什么?这与 myProc 有何不同;行吗?
    • @WarrenP:IIRC 这曾经是类方法引用的情况,至少当你将它们作为参数传递给其他函数时......
    • 此外,parens 要求是违反 Pascal 标准的。
    • @Marjan 传递参数(更一般地,如果 Proc;Proc(); 位于赋值运算符的右侧)是不同的 - 在这种情况下是 Proc;Proc();有不同的含义 - 见stackoverflow.com/questions/2788424/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多