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

Ошибка обработки аргументов

Вопрос

Не знал, как назвать тему :)

 

Код из программы выдает ошибку в 6-й строке.

 

Хотел понять обработку аргументов.

local args = {...}


if #args ~= 1 then
  print("Ничего")
else n = args[1]
    if n = 1 then
      print (n)
    end
  end

 

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


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

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

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. Тогда никаких ошибок не должно возникнуть.

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

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


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

Спасибо, Алекс! Забыл поставить второй знак "=". Увлекся булевыми значениями в другой программе, а этот код только выдержка из нее.

 

 

Рабочий код, как я думаю, выглядит так.

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?

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

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


Ссылка на сообщение
Поделиться на других сайтах
 if n==1 then print(1)

Я правильно пронимаю, что print выведет первое значение из таблицы args?

 

Нет.

Этот кусок кода означает:

если переменная n равна 1, напечатать в консоль цифру 1

Если ты хочешь напечатать первое значение из args, ты должен явно это указать:

print(args[1])

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


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

 

 

 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

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


Ссылка на сообщение
Поделиться на других сайтах
  if n == 1 then
    print(1) -- не написал n, потому что в данной части кода он всегда равен 1
  else
    print(n) -- здесь я не знаю чему равен n
  end

 

Я наверное что-то пропустил, но какой сакральный смысл в этом куске кода?  :)

 

Можно же просто print(n).

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


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

Я наверное что-то пропустил, но какой сакральный смысл в этом куске кода?  :)

 

Можно же просто print(n).

Чтобы показать, что когда мы знаем чему равен n, можно его заменять известным значением.

Разве это не очевидно?

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


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

Чтобы показать, что когда мы знаем чему равен n, можно его заменять известным значением.

Разве это не очевидно?

 

А зачем?

 


print(select(1, ...) or "Ничего")

Зачем велосипеды строить?

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

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


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

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

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

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

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

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

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

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

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


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