Форум: "Начинающим";
Текущий архив: 2015.09.10;
Скачать: [xml.tar.bz2];
ВнизОпределить тип данных Найти похожие ветки
← →
sniknik © (2014-03-25 13:20) [40]+
Procedure Proc1(a: word); Begin {код}end;
и
Procedure Proc1(a, б: byte); Begin {код}end;
не отличаются в стиле передачи параметра, и там и там будет задействован регистр AX, т.е. если подменить формальное описание при работе с dll например, то можно задать для первого 2мя переменным а для второго наоборот одной... для компа без разницы.
просто это МЫ ПРИНИМАЕМ что в первом случае с ним работаем как с целым, а во втором как с двумя половинками... НАМ, людям, так удобнее.
← →
sniknik © (2014-03-25 13:21) [41]> sniknik, а мне нужно чтобы Int64 иммела свой ИД нужного диапазона и далее их использовать как метки т.е если
а мне нужен дворец на багамах и гарем из 365 наложниц... но реальность она несколько иная.
← →
Ega23 © (2014-03-25 13:22) [42]
type
TMyInt64 = record
ID: Int64;
end;
procedure Foo(Value: TMyInt64);
begin
if Value.ID - размеченная then
Proc1(Value.ID)
else
ShowMessage(неразмечаена переменная)
end;
И теперь сама Proc1 может принимать любые значения Int64, а вот Foo - уже только то, что ты туда осознанно передал.
← →
Ega23 © (2014-03-25 13:24) [43]
> и гарем из 365 наложниц
Выходные только по високосным годам?
← →
clickmaker © (2014-03-25 13:26) [44]> Выходные только по високосным годам?
одна из наложниц по двойной ставке работает
← →
Inovet © (2014-03-25 13:33) [45]> [42] Ega23 © (25.03.14 13:22)
> TMyInt64 = record
> ID: Int64;
> end;
Тогда уж класс MyID с конструкторами, сетерами и гетерами. Хм, 365 штук, да.
← →
clickmaker © (2014-03-25 13:34) [46]> Тогда уж класс MyID с конструкторами, сетерами и гетерами.
> Хм, 365 штук
с блэкджеком и шлюхами. 365 штук
← →
Сергей (2014-03-25 13:47) [47]Ega23, ты знаешь мысль очень хорошая(!) сделать через TmyInt64. Спасибо большое!
Вот только...
Например вот так у меня получится...
TMyInt64 = record ID: Int64; end;
Procedure Proc1 (Value:: Variant)
begin
case VarType(Value) of
TMyInt64 : ShowMessage("Это переменная TmyInt64 проверить размеченность Value.ID и т.д.");
else ShowMessage(“Обычное Числовое значение НЕ TmyInt64 ”);
end;
ПРАВИЛЬНО ЛИ Я НАПИСАЛ? (еще не проверял)
Будут ли “хаваться” и определяться при:
Var I64:TMyInt64;
Proc1( I64);
Proc1(56234);
← →
clickmaker © (2014-03-25 13:54) [48]> Будут ли “хаваться”
не будут. Потому что для Variant не определен TMyInt64.
Если TMyInt64 сделать классом, то можно юзать if (Value is TMyInt64)
← →
Ega23 © (2014-03-25 13:59) [49]
> Сергей (25.03.14 13:47) [47]
>
> Ega23, ты знаешь мысль очень хорошая(!) сделать через TmyInt64.
> Спасибо большое!
> Вот только...
Блин. Ну ты опять через задницу всё переиначил.
Давай с самого начала: какая стоит задача? Глобальная.
← →
Сергей (2014-03-25 14:07) [50]Ega23,
Так... :-) Первый шаг сделан: TMyInt64 = record ID: Int64; end; размечаем глобально.
Нужно сделать процедуру Proc1 (а таких процедур будет не одна) которая будет “хавать” обычные числа и данные типа TmyInt64! внутри Proc1 чтобы можно было разобраться - это данные типа TmyInt64 или это другие данные (числовые других переменных, (не особо важно))
Вот так теперь стоит вопрос.
← →
Сергей (2014-03-25 14:20) [51]clickmaker, ну вот пробы сделал через Class а не через record вот только число оно "хавать" не хочет
Type TlvLabel=Class ID:int64;end;
Var m1:TlvLabel;
Procedure Proc1(Value:TObject);
Begin
if (Value is TlvLabel) then Begin end;// ShowMessage("Это переменная TmyInt64 проверить размеченность Value.ID и т.д.");
//else ShowMessage(“Обычное Числовое значение”);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Proc1(m1);
Proc1(2333);
end;
← →
brother © (2014-03-25 14:21) [52]те с миру по нитке и накодишь?
← →
Сергей (2014-03-25 14:27) [53]brother, ну раз так получается... дак шож делать :-)
← →
Jeer © (2014-03-25 14:35) [54]>дак шож делать :-)
Брось дурью маяться - есть места на замену гастарбайтеров.
Адресок могу подсказать.
← →
clickmaker © (2014-03-25 14:38) [55]> только число оно "хавать" не хочет
ну сделай боксинг, если уж знаешь толк в извращениях
Proc1(TObject(2333));
← →
MBo © (2014-03-25 14:39) [56]Про проблему X-Y-Z уже вспоминали?
← →
Inovet © (2014-03-25 14:41) [57]> [56] MBo © (25.03.14 14:39)
> Про проблему X-Y-Z уже вспоминали?
А то. В самом начале ещё.
← →
Сергей (2014-03-25 14:43) [58]Причем тут извращения...
Можно ли сделать чтобы процедура «хавала» данные (числовые) и типы мной созданные ? А внутри процедуры их отличать ?
← →
brother © (2014-03-25 14:52) [59]> процедура «хавала»
я думал разговор там про пипл... а тут (
← →
Ega23 © (2014-03-25 15:04) [60]
> Ega23,
> Так... :-) Первый шаг сделан: TMyInt64 = record ID: Int64;
> end; размечаем глобально.
> Нужно сделать процедуру Proc1 (а таких процедур будет не
> одна) которая будет “хавать” обычные числа и данные типа
> TmyInt64! внутри Proc1 чтобы можно было разобраться - это
> данные типа TmyInt64 или это другие данные (числовые других
> переменных, (не особо важно))
> Вот так теперь стоит вопрос.
Нет. Вопрос стоит не так. Это - твоё видение решения некой задачи. Следствие, так сказать.
Я же тебя спрашивал про задачу. Какова причина "размечания"?
← →
RWolf © (2014-03-25 15:13) [61]
> [60]
я так понял топикстартера, что это банально переменная, которой никто ничего не присвоил. Решение в лоб — Variant.
← →
Ega23 © (2014-03-25 15:16) [62]
> я так понял топикстартера, что это банально переменная,
> которой никто ничего не присвоил. Решение в лоб — Variant.
Было уже. Он чего-то другого хочет.
← →
clickmaker © (2014-03-25 15:23) [63]да уже практически всё было
- variant
- tobject
- max, min
Осталось предложить индусский народный метод: переводить число в строку и проверять длину
← →
Сергей (2014-03-25 17:26) [64]Ega23, причина размечания в том, что каждая переменная должна быть как метка (на таблицу) и каждая из процедур Proc1, Proc2 и т.д. должна принимать числовое значение и метку, а также "понимать", что это числовое значение или метка. И вот если сделать Var a, b:int64; и забыть присвоить им уникальный ИД, (нужного диапазона) запустить в Proc1,Proc2 и т.д. то процедуры не будут видеть разницу между a и b и "0". Вот почему я изначально задал вопрос: Можно ли прицедуре понимать что это Int64, а не просто числовое значение.
Type TlvLabel=Class ID:int64;end; Var A:TlvLabel - идея хорошая! тем более,что случано не присвоишь A:=234; - Это очень даже к стати! Но теперь вопрос как добиться что-бы в процедуру можно было "заганять" TlvLabel и числовые значения ? а внутри процедур определять мол это TlvLabel или просто число.
← →
RWolf © (2014-03-25 17:35) [65]в [2] ответ прозвучал уже.
← →
Inovet © (2014-03-25 17:40) [66]> [64] Сергей (25.03.14 17:26)
Не надо разные сущности через одну дырку в процедуру пропускать а вней потом определять что там пришло.
Должны быть вместе ID : TMyID и Val : Int64 к нему привязанное - делай класс с двумя такими полями, может, и рекорд хватит. Его и передавай в процедуру. О чём тебе всю ветку с разных сторон пытаются объяснить. Всё, ничего постороннего в процедуру не попадёт, а непротиворечивость ID и Val отслеживай в самом классе. А может окажется, что и этой обсуждаемой процедуре самое место в этом самом классе.
← →
Сергей (2014-03-25 18:00) [67]Всем спасибо за внимание и участие. Но это всё не ТО что нужно. У меня всё работает нормально и всё процедуры,а их более 200 построены на этом. Беда только в том что переменной забываешь делать GetID(Val) чтобы ей Val присваивался уникальный ИД в (нужном диапазоне) и получаешь "коварный удар", что процедуры её воспринимают как число, как ноль и нет разницы между переменными Val1 и Val2 если они равны нулю. Да и как я вас понял, понять, что это не ноль, а переменная тоже невозможно. Надоело получать такие "удары". Я думал может это как-то можно решить т.е. так как хотелося-бы.
Еще раз всем спасибо за внимание.
← →
Sha © (2014-03-25 21:00) [68]опиши задачу на уровень выше, что надо сделать, а не то как ты это делаешь
← →
Сергей (2014-03-25 22:35) [69]Да всё уже! - Не нужно! Спасибо! Тема закрыта.
Я уже свои мысли перестроил! т. е. действительно верно было сказано, что разные типы данных нужно и «толкать» разным процедурам, а не в смесь в одну! тем более не так уж их и много процедур которые надо будет переделывать, да и не сложно . А с этим проблем нет.
В будущем понадобится разобраться с конструкторами если можно киньте ссылку на простейший пример. т. е. нужно будет Proc1 использовать как Proc1(a:int64); Proc1(a,b:int64); Proc1(a,b,c:int64);
т.е. Чтобы одну процедуру можно было использовать с разным количеством одинаковых параметров. Такое сложно сделать ? Через конструктор как-то ?
← →
Sha © (2014-03-25 22:43) [70]"Overload" F1 "Overloading procedures and functions"
← →
Сергей (2014-03-25 23:13) [71]Sha, СПАСИБО!
Хм... неужели всё так просто, т.е. дописуй к процедуре overload; и всё будет в порядке!
Страницы: 1 2 вся ветка
Форум: "Начинающим";
Текущий архив: 2015.09.10;
Скачать: [xml.tar.bz2];
Память: 0.59 MB
Время: 0.046 c