Перейти к содержимому
  • 0
Teen_Romance

Кеширование библиотек в OC

Вопрос

Создал "библиотеку", положил в /lib/<name>.lua. Она работает. Изменил библиотеку, но изменения не учитываются при ее использовании после изменений.

В документации нашел вот это:
 

Цитата

Returns library defined by name. First, if the library has been loaded previously, the package library will have cached it and require will return the cached version of the library. For unloading a precached library, see package.loaded. If the library is not cached, the package.path is searched until a match is found.

package это у нас библиотека для загрузки библиотек, понятно. Но "For unloading precached library, see package.loaded.", не очень понятное объяснение. В поле loaded лежит таблица с hardcoded стандартными либами. Я не понимаю, новые библиотеки тоже кешируются или только те что указаны? Если новые тоже кешируются, что вероятно, то как это офнуть? 

Изменено пользователем Teen_Romance

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Рекомендуемые сообщения

Сбрасывать кеш надо перед require('numbers'):

 

package.loaded['numbers'] = nil

что-то там = require('numbers')

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
15 минут назад, Teen_Romance сказал:

/lib/<name>.lua

Вроде бы лучше библиотеки складывать в /usr/lib/<name>.lua, но это так, просто для красоты.

 

13 минуты назад, Teen_Romance сказал:

Я не понимаю, новые библиотеки тоже кешируются или только те что указаны?

Новые тоже.

 

13 минуты назад, Teen_Romance сказал:

Если новые тоже кешируются, что вероятно, то как это офнуть?

Офнуть проблематично, для этого надо (и надо бы, кстати) переписать require.

А выбросить библиотеку из кеша можно так: package.loaded[<name>] = nil

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

@ProgramCrafter
Содержимое библиотеки изначально:
 

Скрытый текст

image.png.4d87559b22bbb95d84e5e33c7002a5e3.png

Добавляем строку в /lib/package.lua:

Скрытый текст

image.png.538a32248eb2fdd05bb0d941bd0c20c6.png

Сохраняем и меняем библиотеку(меняем точку на 15):

Скрытый текст

image.png.4831235c9a03bd619d7bcac28c590dee.png

Сохраняем, запускаем изначальный код который юзает библиотеку:

Скрытый текст

image.png.7161c5efc6513407d5b10b2a104c910d.png

Результат тот же :(

 

Я это все делаю в Ocelot эмуляторе, но не думаю что это влияет как то

Изменено пользователем Teen_Romance

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
4 минуты назад, ProgramCrafter сказал:

Сбрасывать кеш надо перед require('numbers'):

Мда) Додуматься до этого было бы непросто. Спасибо!

Изменено пользователем Teen_Romance

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ещё можно заюзать dofile вместо require - результат тот же, а либа каждый раз будет читаться из файла без кеширования

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


×
×
  • Создать...