On-line: Andrey, гостей 1. Всего: 2 [подробнее..]
АвторСообщение
Администратор




Пост N: 2614
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 17.12.12 11:30. Заголовок: hash


Что-то запутался я в трех соснах

Компилирую с Harbour SVN простейшую программу:

func main
local h := { => }

//hb_HAutoAdd(h, .t.)
h:test := 'test'

return nil

Получаю ошибку: no exported variable TEST
Почему ? AUTOADD для хэш по умолчанию включен. Да и если я его задаю напрямую, тоже не помогает.

Но если я добавляю строку:

#include "xhb.ch"

и подлинковываю библиотеку xhb.lib, пример волшебным образом начинает работать.
Почему - непонятно. Функции для хэш при этом не переопределяются (смотрю ppo), init процедур вробе бы нет.
А xhb.lib мне не нужна.
Что я делаю не так (ц) ? И как починить хэш ?


Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 8 [только новые]


moderator


Пост N: 498
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 17.12.12 12:23. Заголовок: xhb-diff.txt: xHarbo..


xhb-diff.txt:

 цитата:
xHarbour allows to access items in hash array using OOP interface.
hVal[ "ABC" ] := 100 can be alternatively written as hVal:ABC := 100.
Using OOP interface is slower then [] operator but it works for all
indexes which are valid upper case [x]Harbour identifiers.
By default Harbour core code does not give such functionality but
it has strong enough OOP API to allow adding such extension without
touching core code even by user at .prg level. It was implemented
in Harbour in XHB.LIB.



Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 23
Зарегистрирован: 07.06.08
ссылка на сообщение  Отправлено: 17.12.12 12:25. Заголовок: Попробуй h:='tes..


Попробуй h['test']:='test' или h[hname]:=hdata если переменные

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 2615
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 17.12.12 12:31. Заголовок: Понятно, спасибо. А ..


Понятно, спасибо.
А как сделать, чтобы Harbour понимал синтаксис

h:test := 'test'

добавление xhb.ch ведь помогает.

если я добавляю

#pragma -ks+

то этот оператор все равно не работает
Что еще может быть такого в xhb.ch ?


Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 685
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 17.12.12 12:31. Заголовок: Pasha пишет: h:test..


Pasha пишет:

 цитата:
h:test := 'test'


может быть так:
h["test"] := 'test'

Przemek в файле xhb-diff.txt написал, что доступ к элементам осуществляется с помощью оператора [].

... опоздал.

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 2616
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 17.12.12 12:39. Заголовок: Да, но Harbour при у..


Да, но Harbour при указании xhb.ch отрабатывает и синтаскис

h:test := 'test'

Вопрос: как это достигается ? Функции вроде бы не перекрываются. Я подозреваю оператор #pragma, но он не помогает

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 686
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 17.12.12 12:49. Заголовок: Паша, почитай xharbo..


Паша, почитай xharbour/doc/hash.txt, может поможет понять разницу, вот кусок:

* XHARBOUR OBJECT MESSAGE COMPATIBILITY
* =====================================
*
* To make programs that used TAssociativeArray() compatible with new hashes,
* a basic compatibility layer has been developed. Hashes can intercept
* certain "object messages" invoked with the colon (:) operator.

Спасибо: 0 
ПрофильЦитата Ответить
moderator


Пост N: 499
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 17.12.12 13:22. Заголовок: Pasha пишет: Вопрос..


Pasha пишет:

 цитата:
Вопрос: как это достигается ?



Перегрузкой операторов. По-видимому, вот этоn код из contrib/xhb все и делает:

xhbcomp.prg:

 цитата:

CREATE CLASS Hash INHERIT __HBHash FUNCTION _Hash
OPTIONAL INHERIT HBHash
ON ERROR FUNCTION XHB_HASHERROR()


xhbmsgs.c: HB_FUNC( XHB_HASHERROR )

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 2617
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 17.12.12 13:29. Заголовок: Понятно, спасибо..


Понятно, спасибо

Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 438
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет