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

Проблема с библиотекой.

Вопрос

Собственно занялся я одной фуфней и встретился с ошибкой которую вообще не понимаю...

 

Функция принимает путь к файлу и читает его. Начиная с шестого бита происходит запись в двухмерную таблицу. Эту же таблицу функция возвращает... Должна возвращать. Ошибка и сама функция в скриншотах. Возможно я тупой - не серчайте.

post-18178-0-27552600-1459095330_thumb.png

post-18178-0-23079500-1459095355_thumb.png

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


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

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

local PIF = require("PIF")

io.write("Введите путь к файлу: ")
local path = io.read()

local pic = PIF.inTable(path)

io.write(pic[1][1], pic[1][2], pic[1][3], pic[1][4])
io.write(pic[2][1], pic[2][2], pic[2][3], pic[2][4])
io.write(pic[3][1], pic[3][2], pic[3][3], pic[3][4])
io.write(pic[4][1], pic[4][2], pic[4][3], pic[4][4])

Обращается к библиотеке. А сама она - вот http://pastebin.com/UcPmkWPj

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


Ссылка на сообщение
Поделиться на других сайтах
local PIF = require("PIF")

io.write("Введите путь к файлу: ")
local path = io.read()

local pic = PIF.inTable(path)

io.write(pic[1][1], pic[1][2], pic[1][3], pic[1][4])
io.write(pic[2][1], pic[2][2], pic[2][3], pic[2][4])
io.write(pic[3][1], pic[3][2], pic[3][3], pic[3][4])
io.write(pic[4][1], pic[4][2], pic[4][3], pic[4][4])

Обращается к библиотеке. А сама она - вот http://pastebin.com/UcPmkWPj

 

 

Библиотека не возвращает методы

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


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

Библиотека не возвращает методы

А по подробнее? :D

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


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

А по подробнее? :D

 

Надо все методы которые должна предоставлять библиотека возвратить через return. А еще убрать вторую строку. Она преждевременно просто останавливает интерпретацию кода библиотеки

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


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

Надо все методы которые должна предоставлять библиотека возвратить через return. А еще убрать вторую строку. Она преждевременно просто останавливает интерпретацию кода библиотеки

Паника! Как вернуть метод?  :unsure:

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


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

Паника! Как вернуть метод?  :unsure:

Смысл библиотеки в том что бы содержать полезные функции, а не полноценную программу каковым является ваша "библиотека".

 

Библиотека имеет вид:

Файл с именем name.lua

 

И содержимым:

local lib = {}

function lib.test()
     print('Hello World')
end

return lib

Когда вы вызываете библиотеку require('name'), вам возвращается таблица lib или boolean значение которое сигнализирует о статусе загрузки библиотеки.

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

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


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

Я думаю, функцию в "библиотеки" надо сделать локальной.

Потом разобраться, для каких таких целей создаётся таблица из 2^8 значений.

Есть и другие способы использования цветов. Например сделать формулу генерирующую цвет по введённым данным, например color = func(r,g,b), где r,g и b от 0 до 3 например.

Или сделать тройной цикл, который бы генерировал и сохранял цвета в одну таблицу. Можно было бы даже упорядочить эту таблицу, которая бы могла выдавать нам нужный цвет по введённым данным color = color_table[r][g]

 

В любом случае я против этой огромной таблицы. Да и не пойму какой был смысл был её создавать вручную.

 

P.S. Нео прав, библиотека имеет конкретные критерии по которым она имеет право называть библиотекой. Во первых, это создание локальной переменной с типом данных - таблица. Далее функции присущи этой таблице и наконец вывод информации через return таблица.

А так же главное требование: все функции записанные в таблицу должны иметь общее назначение. Например, если ты пишешь функции по конвертации систем счисления, то ты не должен туда записывать функции для управления роботом. Для таких целей следует писать отдельную библиотеку.

Библиотека не должна содержать глобальных переменных. У тебя например там создаётся глобальная функция. Глобальные переменные в большинстве своём - зло.

Так же библиотека не должна содержать прочих исполняемых компонентов вне функций. Например просить ввести пароль вне функций или напечатать что то. То есть когда ты прогружаешь библиотеку, она не должна при этом никак влиять на код программы, кроме того что возвращает таблицу. Если ты внутри неё напишешь такую глупость print("библиотека загружена") вне функций, это будет большой минус. Так как библиотеки имеют такой свойство как загрузка на любом движке с поддержкой языка на котором они написаны.

Например я могу взять свою библиотеку по конвертации систем счисления и использовать в своей игре на другом движке.

Конечно можно делать библиотеки заточеные под один конкретный движок, например под OpenOS, но лучше этого не делать если нет острой необходимости.

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

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


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

Я думаю, функцию в "библиотеки" надо сделать локальной.

Зачем? Это метод локальной таблицы.

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


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

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

 

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

 

то есть, я могу спокойно написать что то вроде такого кода, например:

return {  42, 33,  wow = function () end,  chat_messages = {"продам гараж", "куплю гомункула", " где детонатор", "C++ forever"}}
а могу и так:

local a = 42return a ^ 8 * 33 - 2
@Pofigist, все в твоих руках, можно все, например.

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


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

все в твоих руках, можно все, например.

Так-то всё можно, да не всё полезно.

Таблицу локальной делать не обязательно, но, как правило, желательно.

И оператор goto тоже можно использовать, да граблей там разбросано много.

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


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

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

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

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

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

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

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

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

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


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