169 похожих чатов

Есть странная проблема: гружу модуль таким ненормальным образом: f = io.open('path',

'r')
content = f:read('*a')
-- нахожу кое что в content и меняю связанную глобальную вариаблю
fn = loadstring content
и все неплохо, но ошибки, производящиеся этим файлом выглядят непригодно, не указывают на файл.
Что посоветуете?
можно читать файл и потом loadfile, но это значит, что файл 2 раза открывается, не оптимально

1 ответов

9 просмотров

За счёт того что это loadstring, ошибки не будут указывать на файл. Там в debug.getinfo().source не путь до файла сидит, а сама строка, с которой грузили код. Сам ровно прошлой ночью с этим возился, но тут такое дело. У тебя есть целых два варианта решения задачи, и оба - суть "сделаем программирование нормальным": а) вытаскивать новую глобальную переменную из модуля через return var в конце модуля newglobal = require'module' б) Использовать минимум глобальных вариаблей. Модуль должен возвращать объект, не создавать и не модифицировать ничего глобального, и сам - реквайрить минимум другой фигни. В идеальных условиях, всё приложение - это всего лишь один глобальный объект, который является менеджером для всех остальных объектов. Ну, это идеальные условия. В моих игрулях, таким объектом является объект gamestate, который суть конечный автомат с набором состояний: разные менюшки (тоже конечные автоматы, на каждое игровое меню), игровой процесс (который тоже конечный автомат но в квадрате: для "директора" игрового процесса и для всяких пауз/внутриигровых меню) и всякая такая лабуда. В микросервисах, таким объектом является основной объект, с методами init/update, и общая схема проекта выглядит примерно так: main_class = Class() ... -- описываем основной класс ... while true do main_class:update() sleep(n) end Ах да, если одна библиотека используется сразу кучей модулей, я обычно передаю её модулям из корневого объекта в процессе инициализации. Ну, чтобы только в одном месте заменять эту библиотеку, в случае чего (изменение либы/путей).

Похожие вопросы

Обсуждают сегодня

Здравствуйте, хочу сделать HelloWorld в консоли Дельфи, но функция API ничего не выводит, что я делаю не так? program Hello; {$APPTYPE CONSOLE} uses System.SysUtils, WinAPI.Wi...
Sergey Vinogradov
20
лучше скажите, причём тут паскаль?
Alexey Kulakov
22
Вопрос на перед, на следующую пятницу. Сколько строк кода можно вешать на одного программиста, понятно что если проект хорошо написан то можно и миллион. Но есть же где то пре...
AlekseyK Kluchnikov
31
Немного оффтопа: а кто на чем сидит для осдева в плане ide/редактора? Последнее время сидел на vscode, но я его прям не могу нормально воспринимать, перешел на сlion, но меня...
Evg Resh
29
#include <stdio.h> #include <stdlib.h> #include <time.h> int** generate_table(int size_matrix) { int** matrix = (int**)malloc(size_matrix * sizeof(int*)); for (int i ...
Чувак
1
@PerlBanjoBot use v5.38; sub split_on_cond($arr, $cond) { ($a, $b) = ([], []); push @{ $cond->($_) ? $a : $b }, $_ for @$arr; ($a, $b) } use Data::Dumper; warn Dumpe...
Sergei Zhmylove
10
Всем привет! как узнать, что текст в TSkLabel был выведен сокращенным ? Есть функция для TLabel которая позволяет определить , что текст выведен сокращенным function TFrmMai...
DELPHI SOLUTIONS
6
Вот объясните, как это работает: Вот есть допустим unix-подобная система, и программа запускает допустим printf или fork, как это передается ядру, и как оно обрабатывать начин...
Егор
14
Дебил? Я ищу друга
Bitard 228
27
У меня это всегда вопрос вызывало.. Нафига писать код так, чтобы потом ошибки вылавливать?
Nik
44
Карта сайта