Delphi方法调用后跟()

时间:2016-06-09 08:56:31

标签: delphi function-pointers delphi-xe2

我在某些代码中遇到了以下调用:

SQLParser.Parse(qry.SQL.Text)().GetWhereClause

我在Parse调用之后并不理解这两个括号的含义。在实现之后,我得到了每一个的声明:

 TSQLParser = class
  public
    class function Parse(const ASQL: string): ISmartPointer<TSQLStatement>;

  TSQLStatement = class
    function GetWhereClause: string;

  ISmartPointer<T> = reference to function: T;

1 个答案:

答案 0 :(得分:12)

Parse函数返回对函数的引用。你可以调用这个函数。更长的等效形式是:

var
  FunctionReference: ISmartPointer<TSQLStatement>;
  SQLStatement: TSQLStatement;
begin
  { Parse returns a reference to a function. Store that function reference in FunctionReference }
  FunctionReference := TSQLParser.Parse(qry.SQL.Text);
  { The referenced function returns an object. Store that object in SQLStatement }
  SQLStatement := FunctionReference();
  { Call the GetWhereClause method on the stored object }
  SQLStatement.GetWhereClause();

问题中的一行只是一个较短的版本,它不使用显式变量来存储中间结果。