Тема: Object-Handle
Показать сообщение отдельно
Старый 04.09.2005, 21:52   #1
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Плохо

Уже многим становятся интересны эти команды, и не зря - они позволяют повысить скорость работы приложения в обработках типов, за счёт ухода от полного перебора ( см http://www.boolean.name/showpost.php...postcount=19 ). Рассмотрим работу с командами ещё раз - подробно.

HANDLE
Когда вы работаете с типом вы используете что-то вроде указателя на данный элемент типа( сомнительный термин, применительно к Блитц):
Type bot
	Field entity
End Type

ptr.bot=New bot
ptr\entity=1
В данном случае ptr. Так вот - стандартными способами, так или иначе "превратить" переменную в указатель можно только при создании нового элемента типа, или в цикле полного перебора, или используя позиционные команды для элементов.
Что далеко не всегда удобно, и уж точно не универсально.
Команда HANDLE позволяет получить от указателя, универсальное, характеризующее только один конкретный элемент число.
x_ptr=Handle(ptr)
Как видите - ничего сложного.

OBJECT
Теперь необходимо через хендл элемента типа получить доступ к полям элемента - получить указатель на элемент обратно. Выглядит это так
указатель.имя_типа=Object.имя_типа(хендл_элемента) .
Реализация:
new_ptr.bot=Object.bot(x_ptr)
new_ptr\entity=2
Мы "сделали" из new_ptr указатель, используя ранее полученный хендл x_ptr, и присвоили полю элемента типа значение 2. И всё работает!


С переменной, хранящей хендл элемента, можно работать как с обычным числом. Что очень удобно. Для закрепления рекомендую посмотреть конкретный пример - ссылка выше.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Эти 10 пользователя(ей) сказали Спасибо impersonalis за это полезное сообщение:
Артем Валерьевич (04.05.2010), Bagration (16.01.2008), baton4ik (28.05.2010), Crayzi (10.10.2008), DStalk (03.08.2010), ELIAS (30.03.2009), Harter (17.06.2010), Mr_F_ (30.10.2008), Nex (23.03.2010), Randomize (29.06.2009)