procedure haha(var bb:String;aa:String='1');bb就是变参,可以返回
aa可以不传,墨认为'1'

解决方案 »

  1.   

    procedure printasc(var a:String);
    begin
      a:= a+'is exp';
      ...
    end;
    a 是变参,在过程调用后a已被修改。由于使用了 Var,如果是Const则不可修改。
      

  2.   

    使用 variant 数组作函数的参数
      

  3.   

    看看delphi中的Format()函数是怎么作的
      

  4.   

    对不起!可能没说清楚,我是问是否可以建立象C语言的printf()函数那样函数参数个数可变的函数或过程,但是不使用缺省值
      

  5.   

    Variant open array parameters allow you to pass an array of differently-typed expressions to a single procedure or function. To define a routine with a variant open array parameter, specify array of const as the parameter抯 type. Thusprocedure DoSomething(A: array of const);declares a procedure called DoSomething that can operate on heterogeneous arrays.
    The array of const construction is equivalent to array of TVarRec. TVarRec, declared in the System unit, represents a record with a variant part that can hold values of integer, Boolean, character, real, string, pointer, class, class reference, interface, and variant types. TVarRec抯 VType field indicates the type of each element in the array. Some types are passed as pointers rather than values; in particular, long strings are passed as Pointer and must be typecast to string.The following example uses a variant open array parameter in a function that creates a string representation of each element passed to it and concatenates the results into a single string. The string-handling routines called in this function are defined in SysUtils.
    0A
    function MakeStr(const Args: array of const): string;const
      BoolChars: array[Boolean] of Char = ('F', 'T');
    var
      I: Integer;
    begin
      Result := '';
      for I := 0 to High(Args) do
        with Args[I] do
          case VType of
            vtInteger:    Result := Result + IntToStr(VInteger);
            vtBoolean:    Result := Result + BoolChars[VBoolean];
            vtChar:       Result := Result + VChar;
            vtExtended:   Result := Result + FloatToStr(VExtended^);        vtString:     Result := Result + VString^;
            vtPChar:      Result := Result + VPChar;
            vtObject:     Result := Result + VObject.ClassName;
            vtClass:      Result := Result + VClass.ClassName;
            vtAnsiString: Result := Result + string(VAnsiString);
            vtCurrency:   Result := Result + CurrToStr(VCurrency^);
            vtVariant:    Result := Result + string(VVariant^);
            vtInt64:      Result := Result + IntToStr(VInt64^);    end;
    end;We can call this function using an open array constructor (see Open array constructors). For example,MakeStr(['test', 100, ' ', True, 3.14159, TForm])returns the 'string test100 T3.14159TForm'     ____     ____
         \ p \   / g /
          \ l \_/ n /
           \ a   o /
            \ i s /
             \