将 Char 数组定义为常量?

Define an array of Char as constant?

我在 Delphi 10.3.3 中使用此功能:

function StrTrimCharsLeft(const S: string; const Chars: array of Char): string;
var
  I, L: SizeInt;
begin
  I := 1;
  L := Length(S);
  while (I <= L) and ArrayContainsChar(Chars, S[I]) do
    Inc(I);
  Result := Copy(S, I, L - I + 1);
end;

当我以这种方式使用函数时出现错误:

[dcc32 Error]: E2250 There is no overloaded version of 'StrTrimCharsLeft' that can be called with these arguments

const
    BomChars = ['ï', '»', '¿'];
...
s := JclStrings.StrTrimCharsLeft(s, BomChars);

但是当我这样使用时,一切正常,没有错误:

s := JclStrings.StrTrimCharsLeft(s, ['ï', '»', '¿']);

那么如何定义和使用 Char 的数组作为常量?

写的时候

const
  BomChars = ['ï', '»', '¿'];

您已经声明了一个名为 BomCharsset -- 不是数组!

如果您改为将 BomChars 声明为 static array

const
  BomChars: array[0..2] of Char = ('ï', '»', '¿');

它会起作用的。 (参见 Declared Constants § Array Constants。)

(StrTrimCharsLeft(s, ['ï', '»', '¿']); 有效,因为这里的括号是 open array 语法的一部分。具体来说,括号是 "open array constructor" 的一部分。)