Тема: Object-Handle
Показать сообщение отдельно
Старый 02.01.2006, 02:34   #2
AsmLover
 
Сообщений: n/a
Originally posted by impersonalis@Sep 4 2005, 07:52 PM

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

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

Команда Handle не получает "указатель", а присваивает внутренний блитцевский глобальный индекс - номер экземпляра коллекции (сквозной для всех типов), который уже ссылается на двойной связанный список в исходнике Блитца в С++.

 Type a
 Field a,b
End Type

For i=1 To 10
  a.a = New a
  a\a = i
  If i Mod 2
    z  = Handle (a.a)
    a\b = z 
  EndIf
Next

For a.a = Each a 
  Print a\a + " : " + a\b
Next

WaitKey
 
Ответить с цитированием