Nano Hash - криптовалюты, майнинг, программирование

Как экспортировать, а затем получить доступ к экспортированным методам в Lua

У меня есть файл display.lua, в котором есть код для загрузки некоторых ресурсов.

----display.lua
Resources = {}

function Resources:new(rootdir)
  local newObj = {image = {}, audio = {}, root = ""}
  newObj.root = rootdir
  return setmetatable(newObj, self)
end

function Resources:getSpriteSheet(name)
    --- etc etc etc
end  

а затем у меня есть игровая переменная, которую я использую для хранения состояния игры, она находится в другом файле game.lua.

---game.lua
require "display.lua"

function Game:new()
  local newObj = {mode = "", map = {}, player = {}, resources = {}}
  self.__index = self
  return setmetatable(newObj, self)
end

function Game:init()
  self.resources = Resources:new("/home/example/etc/game/")
  local spriteSheet = self.resources:getSpriteSheet("spritesheet.png")
end

У меня есть доступ к коду ресурсов с помощью require. Моя проблема в том, что в Game:init() я не могу получить доступ к Resources:getSpriteSheet(), интерпретатор lua жалуется на «попытку вызвать метод (getSpriteSheet) с нулевым значением»

Я предполагаю, что здесь мне придется экспортировать методы в Resources, но я не знаю, как это сделать, так как я новичок в Lua.

07.01.2015

Ответы:


1

Я думаю, вы хотите return setmetatable(newObj, {__index = self}) вместо return setmetatable(newObj, self).

Кроме того, require "display.lua", вероятно, должно быть require "display", а game.lua должно иметь Game = {} где-то вверху. С этими изменениями ваш пример работает для меня.

07.01.2015
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

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

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..