![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как определить целочисленный тип, принимающий значения -1 и 1?
Mike0902 © (2005-11-21 13:39:00)Как определить целочисленный тип, принимающий значения -1 и 1?
Джо (2005-11-22 03:29:00) [1]В некоторой мере стёб, но иногда бывает уместно нагородить и так:
IPlusMinus = interface
function GetValue: Integer;
property Value: Integer read GetValue;
function Equals (PlusMinus: IPlusMinus): Boolean;
end;
function Plus: IPlusMinus;
function Minus: IPlusMinus;
implementation
type
TPlusMinus = class (TInterfacedObject, IPlusMinus)
private
FValue: Integer;
function GetValue: Integer;
function Equals (PlusMinus: IPlusMinus): Boolean;
public
constructor Create (AValue: Integer);
end;
function Plus: IPlusMinus;
begin
Result := TPlusMinus.Create(1);
end;
function Minus: IPlusMinus;
begin
Result := TPlusMinus.Create(-1);
end;
{ TPlusMinus }
constructor TPlusMinus.Create (AValue: Integer);
begin
inherited Create;
Assert ( (AValue=1) or (AValue=-1), 'Incorrect value in assignment');
FValue := AValue
end;
function TPlusMinus.Equals(PlusMinus: IPlusMinus): Boolean;
begin
Result := FValue = PlusMinus.Value
end;
function TPlusMinus.GetValue: Integer;
begin
Result := FValue
end;
Бредовенький пример:
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
Direction: IPlusMinus;
begin
case Button of
mbLeft: Direction := Minus;
mbRight: Direction := Plus;
mbMiddle: raise Exception.Create('Incorrect button pressed');
end;
// так
ShowMessageFmt ('Direction: %d',[Direction.Value]);
// или так
if Direction.Equals(Minus) then
ShowMessage ('This is a minus direction')
else
ShowMessage ('This is a plus direction')
end;
Главное, нужные методы (в зависимости от области применения) задать в интерфейсе. Или принимать параметр типа IPlusMinus в других методах, выполняющих то или иное действие в зависимости от значения. В принципе, иногда выглядит очень наглядно.
Zeqfreed (2005-11-21 23:27:00) [2]Кефир87 © (21.11.05 22:47) [9]
Неа, нолик лишний :(
Кефир87 (2005-11-21 22:47:00) [3]
type
TPlusMinus = -1..1;
???
Reindeer Moss Eater (2005-11-21 17:05:00) [4]Отсюда вывод: такой тип не нужен вообще.
Reindeer Moss Eater (2005-11-21 16:55:00) [5]C приведением типов этот тип может напринимать много разных значений.
Ноль, сто, экземпляр TButton, False и т.д.
Leonid Troyanovsky (2005-11-21 16:45:00) [6]
> Mike0902 © (21.11.05 15:52) [4]
> Согласен. Все равно приобразовывать придется. Нельзя наверно
> определить такой тип
А зачем? Boolean вполне хватает.
--
Regards, LVT.
Anatoly Podgoretsky (2005-11-21 16:25:00) [7]Mike0902 © (21.11.05 14:10) [2]
Не обязательно, можно и type TPlusMinus = (PlusOne=1, MinusOne=-1);
Mike0902 (2005-11-21 15:52:00) [8]Согласен. Все равно приобразовывать придется. Нельзя наверно определить такой тип
Reindeer Moss Eater (2005-11-21 14:55:00) [9]> тип, принимающий значения -1 и 1?
Тип TPlusMinus может принимать значения MinusOne и PlusOne.
Mike0902 (2005-11-21 14:10:00) [10]спасибо, направление нужни было задать
MBo (2005-11-21 13:48:00) [11]Это нужно?
type TPlusMinus = (MinusOne=-1, PlusOne=1);