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

"Двухсторонние" таблицы lua

Вопрос

Ходил я по стандартным API OC и нашел либу colors. Там можно обратиться к таблице colors.red и получить ее значение и наоборот - ввести colors[14] и получить red. Хотелось бы узнать как такое осуществляется. Не тупо же две таблицы одна из которых инверсированная по ключам и значениям первой.

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


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

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

Ходил я по стандартным API OC и нашел либу colors. Там можно обратиться к таблице colors.red и получить ее значение и наоборот - ввести colors[14] и получить red. Хотелось бы узнать как такое осуществляется. Не тупо же две таблицы одна из которых инверсированная по ключам и значениям первой.

Зайди в папку lib при помощи команды cd lib и посмотри код набрав edit color.lua

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

И в следующий раз изучи повнимательнее компоненты OpenOS - много чего интересного найдёшь просто от прогулки по системным файлам.

 

P.S. Насколько я знаю, понятия "двухсторонние таблицы" не существует. Бывают двухмерные, трёхмерные и прочие таблицы, но двухсторонних как то не встречал.

И да, там не две таблицы, а одна. Библиотека возвращает лишь 1 таблицу color

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

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


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

local table = {}

table[14] = "red"

table.red = 14

 

Если я еще не забыл луа....

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


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

local table = {}

table[14] = "red"

table.red = 14

 

Если я еще не забыл луа....

Да ну в пень эту библиотеку.

Я всегда заношу в таблицу только те цвета что мне нужны. Например вот код из игры Open Clicker:

local color = {
    back=0x000000, --цвет фона по умолчанию
    foreg=0xffffff, --цвет текста по умолчанию
    cookie=0xffcc33, --далее идут прочие цвета различных деталей. Всё это находится вначале программы, позволяя легко настроить то что нужно пользователю, не роясь в коде в поисках нужной переменной
    chocolate=0x663300,
    scoreboard=0xaaaaaa,
    work_cash=0x6699ff,
    work=0xffcc33,
    exit=0xff0000,
    reboot=0xffcc33,
    quit_cash_1=0x00ff00,
    quit_cash_2=0xff0000
}

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


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

Зайди в папку lib при помощи команды cd lib и посмотри код набрав edit color.lua

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

И в следующий раз изучи повнимательнее компоненты OpenOS - много чего интересного найдёшь просто от прогулки по системным файлам.

 

P.S. Насколько я знаю, понятия "двухсторонние таблицы" не существует. Бывают двухмерные, трёхмерные и прочие таблицы, но двухсторонних как то не встречал.

И да, там не две таблицы, а одна. Библиотека возвращает лишь 1 таблицу color

И все равно мне не ясны for в этой либе, особенно второй. Что за for _, k.... "_" - что это?

 

Плюс если я использую таблицу где кейсы простые цифры, а значения - шестнадцатиричные 0x000000 и т.д. Все равно работать будет? :D

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


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

И все равно мне не ясны for в этой либе, особенно второй. Что за for _, k.... "_" - что это?

 

Плюс если я использую таблицу где кейсы простые цифры, а значения - шестнадцатиричные 0x000000 и т.д. Все равно работать будет? :D

Вообще я сейчас понял для чего служит эта библиотека. Она видимо для работы с цветными проводами из других модов.

То есть с цветами в OC эта библиотека вообще не связана.

 

Ну ладно, теперь о самом коде. Там стоит 2 цикла. Что делает такая форма цикла for можешь подробнее почитать в интернете, скажу лишь коротко. Эта форма перебирает все значения таблицы и выводит пару: ключ-значение.

Во втором цикле есть переменная _ (нижний знак подчёркивания). Обычно её нигде не используют, это переменная - "мусорка". Когда функция возвращает 3 значения, а первое и второе нам не нужно, мы пишем _,_, x = func() Таким образом не забиваем лишние переменные лишней информацией.

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

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


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

"_" - что это?

Нижнее подчеркивание в данном случае – просто название переменной. Оно не имеет специального назначения в языке Луа, но стилистически обозначает пропускаемую (не используемую нигде в программе) переменную.

 

for _, v in pairs(t) do print(v) end -- здесь мы печатаем на экран только значения, а раз ключи нам не нужны, мы просто их пропустили.

 

Кверти меня опередил :(

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

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


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

 

table.red = 14

 

Если я еще не забыл луа....

Забыл, видимо, там table["red"]  = 14

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


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

table.red и table["red"] , в общем равнозначные записи. Только в первом случае в качестве ключей нельзя использовать служебные слова Луа и строки с пробелами или особыми символами.

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


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

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

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

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

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

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

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

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

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


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