匿名方法:变量绑定与var参数

时间:2014-07-17 11:31:23

标签: delphi anonymous-methods

我想知道 - 假设对匿名方法的引用不会超过绑定变量,例如当将其用作回调时 - 如果空间要求或性能之间存在差异,或者

  1. 在匿名方法中绑定变量,只需在
  2. 中使用它即可
  3. 通过var Parameter
  4. 将变量传递给匿名方法

    案例1的例子:

    type 
      TCallback = reference to procedure (LogMsg: string);
    
    procedure Log(Msg: string; Callback: TCallback)
    begin
      Callback(Msg + '(' + DateTimeToStr(Now) + ')');
    end;
    
    procedure Test;
    var
      Suffix: string;
      Callback: TCallback;
    begin
      Suffix := '12345';
      Callback := 
        procedure (LogMsg: string)
        begin
          ShowMessage(LogMsg + Suffix);
          Delete(Suffix, 1, 1);
        end);
      Log('Test1', Callback);
      Log('Test2', Callback);
      Log('Test3', Callback);
    end;
    

    案例2的例子:

    type 
      TCallback = reference to procedure (LogMsg: string; var Suf: string);
    
    procedure Log(Msg: string; Callback: TCallback; var Suf: string)
    begin
      Callback(Msg + '(' + DateTimeToStr(Now) + ')', Suf);
    end;
    
    procedure Test;
    var
      Suffix: string;
      Callback: TCallback;
    begin
      Suffix := '12345';
      Callback := 
        procedure (LogMsg: string; var Suf: string)
        begin
          ShowMessage(LogMsg + Suf);
          Delete(Suf, 1, 1);
        end);
      Log('Test1', Callback, Suffix);
      Log('Test2', Callback, Suffix);
      Log('Test3', Callback, Suffix);
    end;
    

    如果我没有犯错,这两个都应该给出以下值:

    Test112345
    Test22345
    Test3345
    

    问题是:这两个中的任何一个可能性能更高(特别是如果使用更大的值而不是单个字符串),更高的内存效率,更多的东西,或它们绝对相等?

    我知道变量生命周期存在差异,如果对匿名方法的引用活得比绑定变量长,但这个讨论应该仅仅是当引用的寿命超过约束时的情况变量

0 个答案:

没有答案