bob558 28 Опубликовано: 18 ноября, 2016 Не знал, как назвать тему Код из программы выдает ошибку в 6-й строке. Хотел понять обработку аргументов. local args = {...} if #args ~= 1 then print("Ничего") else n = args[1] if n = 1 then print (n) end end Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Alex 4 683 Опубликовано: 18 ноября, 2016 if n == 1 then 2 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
qwertyMAN 1 723 Опубликовано: 19 ноября, 2016 (изменено) else n = args[1] Видимо твою проблему уже решили, но мимо этой строки я не могу пройти мимо. Судя по коду я сначала подумал, что ты хотел написать elseif n == args[1] then Но потом по правильному ответу до меня дошло, что ты просто забыл поставить перенос строки после else. Пожалуйста, не делай так больше, это портит читаемость кода. И ещё небольшой совет по поводу кода. Немного лучше он бы выглядел, если бы ты сначала обработал событие #args==1, а потом уже писал else. И да, насчёт if n ==1 then print(n), чисто логически, не проще ли написать if n==1 then print(1). Или ты предполагаешь, что если n==1, то во время отображения он не будет равен 1??? И ещё, если таблица args пустая, то #args выдаст 0. Но так как у тебя стоит событие if #args==1 и 0 ты никак не обрабатываешь, я бы посоветовал его заменить на if #args<2 then ... else ... end. Тогда никаких ошибок не должно возникнуть. Изменено 19 ноября, 2016 пользователем qwertyMAN 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
bob558 Автор вопроса 28 Опубликовано: 20 ноября, 2016 (изменено) Спасибо, Алекс! Забыл поставить второй знак "=". Увлекся булевыми значениями в другой программе, а этот код только выдержка из нее. Рабочий код, как я думаю, выглядит так. local args = {...} if #args ~= 1 then print("Ничего") else n = tonumber(args[1]) if n == 1 then print (n) end end qwertyMAN, спасибо за дополнения. Этим тестовым кодом хотел разобраться как ввести доп аргументы во время запуска программы.Ты предложил: if n==1 then print(1) Я правильно пронимаю, что print выведет первое значение из таблицы args? И еще, что значит обработать событие #args==1? Изменено 20 ноября, 2016 пользователем bob558 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Totoro 3 563 Опубликовано: 20 ноября, 2016 if n==1 then print(1) Я правильно пронимаю, что print выведет первое значение из таблицы args? Нет. Этот кусок кода означает: если переменная n равна 1, напечатать в консоль цифру 1 Если ты хочешь напечатать первое значение из args, ты должен явно это указать: print(args[1]) 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
qwertyMAN 1 723 Опубликовано: 20 ноября, 2016 if n==1 then print(1) Я правильно пронимаю, что print выведет первое значение из таблицы args? Я имел ввиду конкретно этот случай. Когда #args[1] == n == 1. При условии, что эти значения равны, в данной части кода можно использовать как #args[1], так и n, так и просто 1. Соответственно код от этого не пострадает и проще использовать последний вариант. В других же случаях, когда не известно значение n, такое конечно же не получится. (заменять n уже известным значением вроде 1) Под "обработать" я имею ввиду задать условие if <условие> then. Готовый код мог бы быть лучше и выглядеть вот так: local args = {...} if #args > 0 then -- игнорируем пустую таблицу local n = tonumber(args[1]) if n == 1 then print(1) -- не написал n, потому что в данной части кода он всегда равен 1 else print(n) -- здесь я не знаю чему равен n end else print("Ничего") end 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Totoro 3 563 Опубликовано: 20 ноября, 2016 if n == 1 then print(1) -- не написал n, потому что в данной части кода он всегда равен 1 else print(n) -- здесь я не знаю чему равен n end Я наверное что-то пропустил, но какой сакральный смысл в этом куске кода? Можно же просто print(n). 2 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
qwertyMAN 1 723 Опубликовано: 20 ноября, 2016 Я наверное что-то пропустил, но какой сакральный смысл в этом куске кода? Можно же просто print(n). Чтобы показать, что когда мы знаем чему равен n, можно его заменять известным значением. Разве это не очевидно? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
LeshaInc 625 Опубликовано: 20 ноября, 2016 (изменено) Чтобы показать, что когда мы знаем чему равен n, можно его заменять известным значением. Разве это не очевидно? А зачем? print(select(1, ...) or "Ничего") Зачем велосипеды строить? Изменено 20 ноября, 2016 пользователем LeshaInc 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Не знал, как назвать тему
Код из программы выдает ошибку в 6-й строке.
Хотел понять обработку аргументов.
Поделиться сообщением
Ссылка на сообщение
Поделиться на других сайтах