在Delphi中,我可以定义一系列字符或整数,如下所示:
var
a,i: integer;
b: char;
intrange: 1..9;
charrange: 'α' .. 'ζ';
begin
for a := low(IntRange) to high(IntRange) do
begin
Memo1.Lines.Add('Integer Range Iteration = ' + intToStr(a) ) ;
end;
i:=0;
for b := low(charrange) to high(charrange) do
begin
i := i + 1;
Memo1.Lines.Add('Character Range Iteration = ' + intToStr(i) + ', value = ' + b +' ord '+ inttostr(ord(b))) ;
end;
end;
如何将范围作为参数传递给函数?
答案 0 :(得分:13)
您可以使用subrange types:
type
TCharrange = 'α' .. 'ζ';
procedure MyFunction(Char: TCharrange);
现在你可以做到
MyFunction('γ');
,而
MyFunction('a');
无效。
答案 1 :(得分:4)
据我所知,你想要传递范围而不是某个指定范围内的字符。如果这是一个正确的理解,那么你需要传递两个参数(最小和最大)或者可能将它们包装在一个记录中。
答案 2 :(得分:3)
您可以在某些情况下尝试设置,例如:
type
TMyRange = 1..5;
TMyRangeSet = Set of TMyRange;
procedure A(const V: TMyRangeSet);
var X : TMyRange;
begin
for X := Low(TMyRange) to High(TMyRange) do
if X in V then { included }
end;
begin
A([3..4]);
end.
答案 3 :(得分:2)
我相信您需要先将其定义为类型,例如:
type
TMyRange = 1..2;
然后:
function Whatver(Range: TMyRange): Boolean;
begin
end;
答案 4 :(得分:2)
我对仿制药比较陌生,但我认为这可能是对你的问题的第二种解释(David Heffernan解释)的一个相当简洁的解决方案。
type
TRange<T> = record
MinVal: T;
MaxVal: T;
constructor Create(AMinVal, AMaxVal: T);
end;
TCharrange = TRange<Char>;
// TIntrange = TRange<Integer>;
// etc.
constructor TRange<T>.Create(AMinVal, AMaxVal: T);
begin
MinVal := AMinVal;
MaxVal := AMaxVal;
end;
现在你可以做到
procedure MyFunction(Char: TCharrange);
begin
ShowMessage(Char.MinVal);
ShowMessage(Char.MaxVal);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
r: TCharrange;
begin
r.Create('a', 'c');
MyFunction(r);
end;