Текущий архив: 2005.12.11;
Скачать: CL | DM;
ВнизКак определить целочисленный тип, принимающий значения -1 и 1? Найти похожие ветки
← →
Mike0902 © (2005-11-21 13:39) [0]Как определить целочисленный тип, принимающий значения -1 и 1?
← →
MBo © (2005-11-21 13:48) [1]Это нужно?
type TPlusMinus = (MinusOne=-1, PlusOne=1);
← →
Mike0902 © (2005-11-21 14:10) [2]спасибо, направление нужни было задать
← →
Reindeer Moss Eater © (2005-11-21 14:55) [3]>тип, принимающий значения -1 и 1?
Тип TPlusMinus может принимать значения MinusOne и PlusOne.
← →
Mike0902 © (2005-11-21 15:52) [4]Согласен. Все равно приобразовывать придется. Нельзя наверно определить такой тип
← →
Anatoly Podgoretsky © (2005-11-21 16:25) [5]Mike0902 © (21.11.05 14:10) [2]
Не обязательно, можно и type TPlusMinus = (PlusOne=1, MinusOne=-1);
← →
Leonid Troyanovsky © (2005-11-21 16:45) [6]
> Mike0902 © (21.11.05 15:52) [4]
> Согласен. Все равно приобразовывать придется. Нельзя наверно
> определить такой тип
А зачем? Boolean вполне хватает.
--
Regards, LVT.
← →
Reindeer Moss Eater © (2005-11-21 16:55) [7]C приведением типов этот тип может напринимать много разных значений.
Ноль, сто, экземпляр TButton, False и т.д.
← →
Reindeer Moss Eater © (2005-11-21 17:05) [8]Отсюда вывод: такой тип не нужен вообще.
← →
Кефир87 © (2005-11-21 22:47) [9]
type
TPlusMinus = -1..1;
???
← →
Zeqfreed © (2005-11-21 23:27) [10]Кефир87 © (21.11.05 22:47) [9]
Неа, нолик лишний :(
← →
Джо © (2005-11-22 03:29) [11]В некоторой мере стёб, но иногда бывает уместно нагородить и так:
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 в других методах, выполняющих то или иное действие в зависимости от значения. В принципе, иногда выглядит очень наглядно.
Страницы: 1 вся ветка
Текущий архив: 2005.12.11;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.044 c