[Logo] LUA Форум
  [Search] Search   [Recent Topics] Recent Topics   [Hottest Topics] Hottest Topics   [Members]  Member Listing   [Groups] Back to home page 
[Register] Register / 
[Login] Login 
Ликбез  XML
Forum Index » LUA: Общие вопросы
Author Message
z00n
Постоянный посетитель

Joined: 15/02/2008 12:15:56
Messages: 96
Offline

GrayFace wrote:А что такое weak value?



Это вот такая таблица:


Они нужны чтобы держать weak-reference на обекты - у вас есть ссылка, но это не мешает GC собирать объект, если на него нет других, не-слабых ссылок.

http://en.wikipedia.org/wiki/Weak_reference
http://www.lua.org/pil/17.html
Berkut
Новичок
[Avatar]

Joined: 19/04/2008 10:28:01
Messages: 21
Offline

z00n wrote:Дело в том, что файл уже открыт, раз вы не можете его удалить. Найдите где в вашей программе вы открываете файл и не закрываете его. Если вам нужно держать файлы открытыми - заведите глобальную lookup-table :: {filename->filehandle} c weak value. Это позволит закрывать файл по имени перед удалением.

Проблема в том, что исходя из кода программы, он должен быть закрыт. В функции сохранения сообщения файл закрывается. При входе пользователю выдаются сообщения из файла, но и там файл закрывается. Если я просто пытался закрыть файл, отладчик выдаёт, что не может найти открытый файл (естественно, я пытаюсь закрыть именно тот файл, который открывал через другие функции).
z00n
Постоянный посетитель

Joined: 15/02/2008 12:15:56
Messages: 96
Offline

Berkut wrote:
Проблема в том, что исходя из кода программы, он должен быть закрыт. В функции сохранения сообщения файл закрывается. При входе пользователю выдаются сообщения из файла, но и там файл закрывается. Если я просто пытался закрыть файл, отладчик выдаёт, что не может найти открытый файл (естественно, я пытаюсь закрыть именно тот файл, который открывал через другие функции).


Это все врядли так - закрытый файл без проблем удаляется любым способом:




Я не знаю, попробуйте локализовать проблему или дайте компилирующися кусок кода с проблемой.
Berkut
Новичок
[Avatar]

Joined: 19/04/2008 10:28:01
Messages: 21
Offline

z00n wrote:Я не знаю, попробуйте локализовать проблему или дайте компилирующися кусок кода с проблемой.

Да уже не актуально, т.к. после явного объявления открытия файла, он прекрасно удаляется.
GrayFace
Новичок

Joined: 17/06/2008 06:54:06
Messages: 27
Location: Новосибирск
Offline

А возможно загрузить скрипт из строки, при этом указав ему какое-нибудь имя? (чтобы в случае ошибки это имя выдавать) т.е. как dofile, но без файла
[Email] [ICQ]
smz
ГУРУ

Joined: 14/03/2008 13:23:00
Messages: 282
Offline

GrayFace wrote:А возможно загрузить скрипт из строки, при этом указав ему какое-нибудь имя? (чтобы в случае ошибки это имя выдавать) т.е. как dofile, но без файла

loadstring принимает второй параметр "chunkname".
Berkut
Новичок
[Avatar]

Joined: 19/04/2008 10:28:01
Messages: 21
Offline

Можно ли как-то оптимизировать такую конструкцию для сохранения многоуровневых таблиц?



Проблема в том, что при некоторых условиях (хоть убейте, так и не смог выяснить при каких конкретно) таблица сохраняется в искажённом виде:



В случае, если в функции WriteTable я использую w вместо r+, то никаких искажений не происходит. Но суть в том, что мне необходимо сохранять в этом же файле и другие данные, в таблицу не входящие.
Если в коде есть "слабое" место, укажите мне на него пожалуйста.
smz
ГУРУ

Joined: 14/03/2008 13:23:00
Messages: 282
Offline

Berkut wrote:В случае, если в функции WriteTable я использую w вместо r+, то никаких искажений не происходит. Но суть в том, что мне необходимо сохранять в этом же файле и другие данные, в таблицу не входящие.
Если в коде есть "слабое" место, укажите мне на него пожалуйста.
Ну, похоже, "r+" и есть это слабое место. Используй "a".
Berkut
Новичок
[Avatar]

Joined: 19/04/2008 10:28:01
Messages: 21
Offline

Попробую. Вот только так и не понял, в чём кривизна... Ведь в подавляющем большинстве случаев функция работает нормально.
GrayFace
Новичок

Joined: 17/06/2008 06:54:06
Messages: 27
Location: Новосибирск
Offline

Похоже, pluto собралось неправильно
error LNK2019: unresolved external symbol _pluto_persist referenced in function "int __cdecl Persist(struct lua_State *)" (?Persist@@YAHPAUlua_State@@@Z)
error LNK2019: unresolved external symbol _pluto_unpersist referenced in function "int __cdecl Unpersist(struct lua_State *)" (?Unpersist@@YAHPAUlua_State@@@Z)


В pluto.lib вообще нет ни одного упомянания persist
Добавлял так же, как Lua, в "Linker -> General -> Additional Library Directories" и в "Linker -> Input -> Additional Dependancies".

This message was edited 1 time. Last update was at 06/07/2008 23:03:32

[Email] [ICQ]
Berkut
Новичок
[Avatar]

Joined: 19/04/2008 10:28:01
Messages: 21
Offline

smz wrote:Ну, похоже, "r+" и есть это слабое место. Используй "a".

Опыт показал, что пробоина в самой функции. Смена режима на "а" или "а+" даёт тот же результат. При каком-то условии таблица коверкается.
smz
ГУРУ

Joined: 14/03/2008 13:23:00
Messages: 282
Offline

Berkut wrote:
smz wrote:Ну, похоже, "r+" и есть это слабое место. Используй "a".

Опыт показал, что пробоина в самой функции. Смена режима на "а" или "а+" даёт тот же результат. При каком-то условии таблица коверкается.

1. К сожалению, приведенный тобой кусок исковерканной таблицы не производит впечатления скопированного, а скорее записанного по памяти. Пожалуйста, скопируй кусок повреждённой таблицы, тогда можно будет говорить конкретнее.

2. Замени этот кусок:
на этот:

This message was edited 1 time. Last update was at 08/07/2008 12:02:47

Berkut
Новичок
[Avatar]

Joined: 19/04/2008 10:28:01
Messages: 21
Offline

smz wrote:
1. К сожалению, приведенный тобой кусок исковерканной таблицы не производит впечатления скопированного, а скорее записанного по памяти. Пожалуйста, скопируй кусок повреждённой таблицы, тогда можно будет говорить конкретнее.

mraleph
Постоянный посетитель
[Avatar]

Joined: 20/05/2008 19:13:01
Messages: 42
Location: Новосибирск
Offline

Помойму проблема очевидно. r+ это обновление, доступ на чтение и запись. Данные пишутся поверх уже записанного.
Если второй раз пишется более короткая таблица, чем была записана в первый раз получаем косячню.

This mystery is already on the tip of my tongue
[Email]
GrayFace
Новичок

Joined: 17/06/2008 06:54:06
Messages: 27
Location: Новосибирск
Offline

Повторю вопрос, чтобы не потерялся:

Похоже, pluto собралось неправильно
error LNK2019: unresolved external symbol _pluto_persist referenced in function "int __cdecl Persist(struct lua_State *)" (?Persist@@YAHPAUlua_State@@@Z)
error LNK2019: unresolved external symbol _pluto_unpersist referenced in function "int __cdecl Unpersist(struct lua_State *)" (?Unpersist@@YAHPAUlua_State@@@Z)


В pluto.lib вообще нет ни одного упомянания persist
Добавлял так же, как Lua, в "Linker -> General -> Additional Library Directories" и в "Linker -> Input -> Additional Dependancies".
[Email] [ICQ]
 
Forum Index » LUA: Общие вопросы
Go to:   
Powered by JForum 2.1.9 © JForum Team