Delphi 方法调用后跟 ()
Delphi method call followed by ()
我在某些代码中遇到过以下调用:
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;
Parse 函数 returns 对函数的引用。你可以调用这个函数。更长的等效形式是:
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();
问题中的那一行只是一个较短的版本,没有使用显式变量来存储中间结果。
我在某些代码中遇到过以下调用:
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;
Parse 函数 returns 对函数的引用。你可以调用这个函数。更长的等效形式是:
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();
问题中的那一行只是一个较短的版本,没有使用显式变量来存储中间结果。