Как передать диапазон в качестве параметра в Delphi? - PullRequest
2 голосов
/ 11 февраля 2011

В 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;

Как я могу передать диапазон в качестве параметра функции?

Ответы [ 5 ]

13 голосов
/ 11 февраля 2011

Вы можете использовать типы поддиапазонов :

type
  TCharrange = 'α' .. 'ζ';

procedure MyFunction(Char: TCharrange);

Теперь вы можете сделать

MyFunction('γ');

тогда

MyFunction('a');

не будет работать.

4 голосов
/ 11 февраля 2011

Как я понимаю, ваш вопрос вы хотите передать диапазон, а не символ, который находится в некотором указанном диапазоне.Если это правильное понимание, вам нужно передать два параметра (минимальный и максимальный) или, возможно, заключить их в запись.

3 голосов
/ 12 февраля 2011

Вы можете попробовать наборы в определенных случаях, например:

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.
2 голосов
/ 11 февраля 2011

Я довольно новичок в дженериках, но думаю, что это может быть довольно аккуратным решением второй интерпретации (интерпретации Дэвида Хеффернана) вашей проблемы.

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;
2 голосов
/ 11 февраля 2011

Полагаю, вам нужно сначала определить его как тип, например:

type
  TMyRange = 1..2;

, затем:

function Whatver(Range: TMyRange): Boolean;
begin

end;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...