WheatComp 3 Опубликовано: 7 июня, 2023 Пытался узнать, сколько используется места на диске. В интерпретаторе в игре работает, а если запускать через программу, то не работает, выдает ошибку lua:4: "attempt to call a nil value (field 'spaceUsed'): local component = require("component") local filesystem = require("filesystem") sp = filesystem.spaceUsed() print(sp) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
RasonGame 15 Опубликовано: 7 июня, 2023 local component = require("component") fs = component.filesystem space = fs.spaceUsed() Ты используешь библиотеку filesystem вместо компонента filesystem. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
WheatComp Автор вопроса 3 Опубликовано: 7 июня, 2023 @RasonGame я брал за основу программу ECS-а: В 17.05.2023 в 19:05, ECS сказал: -- Подключаем библиотеки local component = require("component") local filesystem = require("filesystem") То, что разные команды разбросаны по разным библиотекам и компонентам - это недоработка, по-моему. Мод обновляется постоянно, может, соберут в одном месте. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
RasonGame 15 Опубликовано: 7 июня, 2023 46 минут назад, WheatComp сказал: @RasonGame я брал за основу программу ECS-а: То, что разные команды разбросаны по разным библиотекам и компонентам - это недоработка, по-моему. Мод обновляется постоянно, может, соберут в одном месте. ECS софтины пишет под свою оську. А то что разные функции разбросаны по разным местам - то так и задумано. Мод уже давно не обновляется активно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
WheatComp Автор вопроса 3 Опубликовано: 7 июня, 2023 1 минуту назад, RasonGame сказал: Мод уже давно не обновляется активно. Это распространенное заблуждение. Последнее обновление было 4 июня сего года. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
RasonGame 15 Опубликовано: 7 июня, 2023 1 минуту назад, WheatComp сказал: Это распространенное заблуждение. Последнее обновление было 4 июня сего года. Ога. Пару фиксов и апдейт мелочей. Активной разработки нема, да хотя бы даже порта на новые версии нет. Какая-то фигня, не? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
WheatComp Автор вопроса 3 Опубликовано: 7 июня, 2023 19 минут назад, RasonGame сказал: Мод уже давно не обновляется активно. Возможно, корректнее будет сказать "не обновляется значительно". Пара фиксов и апдейт мелочей - это какая-никакая, а активность. Что мелочами занимаются, согласен. Такое впечатление, что Sangar (главный который) отошел от мода, а занимаются апдейтом его помощники, которые на ютубе туториал снимали с ним. Или помощник. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
eu_tomat 2 154 Опубликовано: 7 июня, 2023 4 часа назад, WheatComp сказал: То, что разные команды разбросаны по разным библиотекам и компонентам - это недоработка, по-моему. Мод обновляется постоянно, может, соберут в одном месте. В каком месте это требуется собрать? Компонент filesystem работает с конкретным носителем, в этом случае информация о занятом дисковом пространстве имеет смысл. А библиотека filesystem работает со сборной файловой системой, в которую может быть смонтировано множество разных носителей. Конечно, можно было бы посчитать, сколько дискового пространства занято на всех смонтированных носителях, но какой в этом практический смысл? 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
WheatComp Автор вопроса 3 Опубликовано: 8 июня, 2023 @eu_tomat ну или хотя бы назвать по-разному, например, disksystem для одного компонента и filesystem для сборной файловой системы. По-моему, это единственный компонент, который можно включать в программу и через точку и через require. А если назвать одинаково, есть высокие шансы, что юзеры запутаются. Не совсем юзерфрендли решение. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
ECS 1 903 Опубликовано: 8 июня, 2023 42 минуты назад, WheatComp сказал: По-моему, это единственный компонент, который можно включать в программу и через точку и через require. А если назвать одинаково, есть высокие шансы, что юзеры запутаются. Не совсем юзерфрендли решение. Аналогичная история с компонентами internet/computer/robot и одноимёнными библиотеками. Это скорее систематика и фича, нежели однократная проблема нейминга Вообще с одной стороны ты прав, и путаница имеет место быть. А с другой - наверняка нашлись бы недовольные альтернативной реализацией, дескать, "А чо у вас компонент зовётся filesystem, а API disksystem? Дискеты - ето уже диски? Сложна!1" Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
WheatComp Автор вопроса 3 Опубликовано: 9 июня, 2023 18 часов назад, ECS сказал: ообще с одной стороны ты прав, и путаница имеет место быть. А с другой - наверняка нашлись бы недовольные альтернативной реализацией, дескать, "А чо у вас компонент зовётся filesystem, а API disksystem? Дискеты - ето уже диски? Сложна!1" Вот-вот. Можно выделить, что к чему относится: robot_com, robot_api. В программировании максимальная точность только помогает и делает код более читаемым. Если видишь, например, filesystem_api, сразу понятно, что это не к компоненту относится. Всего 3 буквы добавили, а такая ясность наступает. Это же нужно только один раз в начале программы писать, а не по 10 раз. А так все в одну кучу свалили, "пусть разбираются". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
eu_tomat 2 154 Опубликовано: 10 июня, 2023 18 часов назад, WheatComp сказал: Можно выделить, что к чему относится: robot_com, robot_api. В программировании максимальная точность только помогает и делает код более читаемым. Если видишь, например, filesystem_api, сразу понятно, что это не к компоненту относится. Всего 3 буквы добавили, а такая ясность наступает. Это же нужно только один раз в начале программы писать, а не по 10 раз. А так все в одну кучу свалили, "пусть разбираются". Кто свалил? В какую-такую одну кучу? Пока что это выглядит как разные кучи. Есть component.filesystem, а есть require("filesystem"). Это разные объекты, и в прикладной программе мы получаем их различным способом. Если программист использует оба объекта в пределах одной области видимости, то он даёт им разные имена, другого выбора у него нет. Если программисту будет удобно, то можно, например, именовать и так: filesystem_com = component.filesystem filesystem_api = require("filesystem") А если же эти объекты не используются в пределах одной программы, то программист может писать просто filesystem, если контекст использования такого имени переменной конкретно этому программисту и его коллегам понятен. И большинство так и пишет. Изучение такого кода, конечно же, иногда смущает новичков, но сами новички не спешат исправлять эту проблему. Хотя, освоившись со временем, могли бы заполнить форум программами с правильными именами переменных с их точки зрения. Это проблема лежит за пределами ответственности авторов мода. Да и не ахти какая это проблема, если бывшие новички сами с ней не борются. 1 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
WheatComp Автор вопроса 3 Опубликовано: 10 июня, 2023 6 часов назад, eu_tomat сказал: Кто свалил? В какую-такую одну кучу? Пока что это выглядит как разные кучи. Есть component.filesystem, а есть require("filesystem"). Это разные объекты Если это разные объекты, то почему они называются одинаково? Пока что выглядит так, что один объект лежит в двух разных кучах. 6 часов назад, eu_tomat сказал: Это проблема лежит за пределами ответственности авторов мода. Да и не ахти какая это проблема Я понимаю, что все сообщество будет сопротивляться такому изменению, ведь придется переписать тучу кода. А удобочитаемость... ну её. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
ECS 1 903 Опубликовано: 10 июня, 2023 1 час назад, WheatComp сказал: Если это разные объекты, то почему они называются одинаково Я одного не пойму: почему тебя так зацепило это явление, неужели оно создаёт настолько серьёзные проблемы? Ведь и в повседневной жизни, и в разговорной речи встречаются омонимы - ключ/лук/мат/лист/коса/каток и прочие. К ним у тебя такое же радикальное отношение или, может быть, это всё же дело привычки? Если взять пример из области кодинга, то в большинстве языков программирования имеется концепция пространств имён, разграничивающих доступ к классам с одинаковыми названиями: в том же .NET имеются System.Windows.Media.Color и System.Drawing.Color. Какой using укажешь - такой класс и будет использован. Схожая путаница возникает между java.nio.file и java.io.file. Эт норма))0 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
WheatComp Автор вопроса 3 Опубликовано: 11 июня, 2023 (изменено) 6 часов назад, ECS сказал: Я одного не пойму: почему тебя так зацепило это явление, неужели оно создаёт настолько серьёзные проблемы? Радикального отношения нет, просто расстроился, не сумев создать и сохранить файл на диск. Какая-то таблица появляется, вместо файла. А тут еще и filesystem проблемы подкидывает. 6 часов назад, ECS сказал: Схожая путаница возникает между java.nio.file и java.io.file. Эт норма))0 Ну ладно, что поделаешь, вот так и живем. зы: файл удалось сохранить. Пытался по этой инструкции делать, оказалось, w нужно брать в кавычки: file = io.open('TEST.txt', "w") Без кавычек не работает. Изменено 11 июня, 2023 пользователем WheatComp Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
WheatComp Автор вопроса 3 Опубликовано: 11 июня, 2023 (изменено) @ECS spaceUsed() все время показывает 512, хотя добавил в директорию диска 2 файла по 1 Мб. Как бы обновить показания? Изменено 11 июня, 2023 пользователем WheatComp Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
ECS 1 903 Опубликовано: 11 июня, 2023 13 часа назад, WheatComp сказал: Пытался по этой инструкции делать, оказалось, w нужно брать в кавычки: Рекомендую следовать инструкциям не из комментов, а из официальной вики или готового софта - так будет существенно меньше проблем 8 часов назад, WheatComp сказал: spaceUsed() все время показывает 512, хотя добавил в директорию диска 2 файла по 1 Мб. Как бы обновить показания? При работе с дисками напрямую из директории игрового сейва пересчёт spaceUsed не производится. Для быстрого пересчёта необходимо вызвать filesystem.close(), т.к. это единственный метод, который его инициирует напрямую. Вероятно, пересчёт также должен осуществиться, если вытащить и вставить диск в ПК, но это не точная инфа, надо курить поведение мода и принципы реинициализации компонентов Если интересны подробности, то причина такого поведения в дороговизне вычисления размера директории, к которой привязан диск - оно выполняется рекурсивно, суммируя размеры всех файлов во всех дочерних директориях. Мод частично решает эту проблему, кешируя значение spaceUsed однократно при инициализации компонента. Затем при любой операции над файлом, когда его размер предсказуем, кешированное значение изменяется без потребности в пересчёте с нуля Уточню, что при "естественном" обращении к диску эта проблема вообще никогда не возникнет, т.к. мод выполняет всю работу по пересчёту самостоятельно 2 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
WheatComp Автор вопроса 3 Опубликовано: 11 июня, 2023 @ECS следующий код дает ошибку: local filesystem = require("filesystem") local fs = component.filesystem filesystem.close() fs.close() su = fs.spaceUsed() print(su) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
ECS 1 903 Опубликовано: 11 июня, 2023 25 минут назад, WheatComp сказал: следующий код дает ошибку: Чтобы что-то закрыть, нужно сперва это что-то открыть. Компонентный вызов open() возвращает дескриптор файла, а APIшный - буферизированный поток, и работа с ними отличается: local filesystemAPI = require("filesystem") local filesystemComponent = require("component").filesystem -- API local stream = filesystemAPI.open("/test.lua", "w") stream:write("Hello world") stream:close() -- Компонент local handle = filesystemComponent.open("/test.lua", "w") filesystemComponent.write(handle, "Hello world") filesystemComponent.close(handle) И вообще не по каждой же строчке кода пинговать форумчан, давай сам думай. Наверняка там ошибка наподобие attempt to call a nil value (field 'close'), означающая, что в filesystem API не существует метода close() 3 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
WheatComp Автор вопроса 3 Опубликовано: 29 июня, 2023 (изменено) В 11.06.2023 в 23:29, ECS сказал: Чтобы что-то закрыть, нужно сперва это что-то открыть. Я пока поставил на паузу игру в ОС. Несколько разочарован модом, возникло ощущение недоделанности. Например, чтобы просто узнать, сколько на диске используется, нужно создать файл, затем закрыть его, и только потом можно получить требуемую информацию. В 11.06.2023 в 23:29, ECS сказал: давай сам думай Попробую. Изменено 29 июня, 2023 пользователем WheatComp Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
eu_tomat 2 154 Опубликовано: 29 июня, 2023 21 минуту назад, WheatComp сказал: чтобы просто узнать, сколько на диске используется, нужно создать файл, затем закрыть его, и только потом можно получить требуемую информацию. В какой версии мода для получения занятого пространства требуется создавать файл? И какой результат возвращает spaceUsed(), если файл не создавать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Пытался узнать, сколько используется места на диске. В интерпретаторе в игре работает, а если запускать через программу, то не работает, выдает ошибку lua:4: "attempt to call a nil value (field 'spaceUsed'):
Поделиться сообщением
Ссылка на сообщение
Поделиться на других сайтах