Перейти к публикации
  • 0
Teen_Romance

Работа условного оператора if

Вопрос

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

image.png.ddd7a8ff55efa9f90b2bfb4c12ab7490.png

Типа если y(nil) тогда не выполнять следующий иф.

image.png.852e6808def0e90712a684863151c16c.png

Как пофиксить?

 

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


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

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

  • 0
1 час назад, Zer0Galaxy сказал:

теперь то код рабочий. Но какой смысл в метатаблице если сама таблица knowns не содержит элементов? Просто вызывай функцию __index и всё.

Если задаваться вопросами о смысле, то какой смысл и в функции __index, если наличие элемента в таблице легко проверяется обычным обращением к самому элементу?

Чем это удобнее уже обсуждённой конструкции if tbl[idx] then?

 

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


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

Это удобней уже тем, что обращений к элементу таблиц в программе может быть множество. И при каждом обращении нужно ставить проверку, "а существует ли такой элемент?". В случае с метатаблицей такую проверку берет на себя Луа. Конечно это никак не ускоряет выполнение программы (наверное), но количество кода сокращает.

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


Ссылка на сообщение
Поделиться на других сайтах
  • 0
16 минут назад, Zer0Galaxy сказал:

Это удобней уже тем, что обращений к элементу таблиц в программе может быть множество. И при каждом обращении нужно ставить проверку, "а существует ли такой элемент?". В случае с метатаблицей такую проверку берет на себя Луа. Конечно это никак не ускоряет выполнение программы (наверное), но количество кода сокращает.

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

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


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

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

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


Ссылка на сообщение
Поделиться на других сайтах
  • 0
17 минут назад, Zer0Galaxy сказал:

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

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

knowns[item_stack.name]()

и для тех предметов, которые мы определили, мы можем обрабатывать их или единообразно, выводя про них комментарий или неоднородно, в зависимости от типа.

В итоге вместо 10  elseif будет 2-3 функции-обработчика, организованных в одну таблицу.

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


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

А кто говорил про 10 elseif? :blink: 

Если по простому, то нужно просто принтить содержимое элемента таблицы, а для отсутствующих элементов выводить "Об этом я не ничего знаю"

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


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

Угу, оберточная функция только занимает память, а к ней еще приколхожен объект, который моментально создается и исчезает.

Нужны либо мухи, либо котлеты. А это ниндзя-индусский код.

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


Ссылка на сообщение
Поделиться на других сайтах
  • 0
Только что, Doob сказал:

Угу, оберточная функция только занимает память, а к ней еще приколхожен объект, который моментально создается и исчезает.

Нужны либо мухи, либо котлеты. А это ниндзя-индусский код. 

Да, но для однопоточной ОС без параллелизма может прокатить.

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


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

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

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

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

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

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

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


×