ПопробуйНужна функция выхода из программы, кто-то подскажет?
error()
Posted 16.06.2013 - 16:59
ПопробуйНужна функция выхода из программы, кто-то подскажет?
error()
Posted 16.06.2013 - 18:27
Тот код я удалил, теперь ошибка test:2: attempt to call nilскинь ошибку и код сюда.
print("Enter q")if read() == "q" then exit() endprint("No exit")
Да, функция сработала как выход, благодарю. Но еще осталась путаница с типами:ПопробуйНужна функция выхода из программы, кто-то подскажет?
error()
UPD: Для решения проблемы я использовал явное приведение типов. Так же появился еще один вопрос, почему этот код выводит строку bbbbb?И еще есть путаница с типами, если я напишу a=read(), и введу например число, то это будет численная переменная? А при вводе слова она станет строковой? Тогда как мне сделать обработку для обоих этих случаев?
Мне нужно что-бы при вводе определенного слова выполнялся свой код, а если ввели нужное число то оно заносилось в переменную b, всё дело в том что выбивает ошибку, так как идет не совпадение типов при сравнивании.
function a()print("aaaaa")returnprint("bbbbb")enda()По идее return должен завершать выполнение функции.
Posted 16.06.2013 - 19:48
Posted 16.06.2013 - 20:13
Posted 16.06.2013 - 20:20
Posted 16.06.2013 - 20:49
Похоже, что надо писать return nil, но тогда он не видит end, из-за чего приходится писать так:Так же появился еще один вопрос, почему этот код выводит строку bbbbb? По идее return должен завершать выполнение функции.
ЗЫ луа умный язык, так что '1'+'2'=3Return (или break) должен быть последним оператором в блоке (иначе следующие за ним операторы никогда не выполнятся). Если действительно необходимо вставить return или break в середину блока, то следует применить составной оператор, например do return end и do break end.
Posted 16.06.2013 - 21:43
Posted 16.06.2013 - 21:50
Posted 16.06.2013 - 22:21
Я так понял в lua знак "+" выступает только в роли арифметического оператора, и при использовании срабатывает неявное приведение типов(для string-ов), например в C++ "+", и конкатенация, и ар. оператор.Неа, Луа всегда автоматически пытается конвертнуть тип переменной. А вот '12'=='1'..'2'
Окай, уже.ЗЫ цитату бы в спойлер спрятал..
Posted 17.06.2013 - 03:26
По-умолчанию read() возвращает тип string даже для чисел. Если нужно получить число - используй tonumber(read())И еще есть путаница с типами, если я напишу a=read(), и введу например число, то это будет численная переменная? А при вводе слова она станет строковой? Тогда как мне сделать обработку для обоих этих случаев? Мне нужно что-бы при вводе определенного слова выполнялся свой код, а если ввели нужное число то оно заносилось в переменную b, всё дело в том что выбивает ошибку, так как идет не совпадение типов при сравнивании.
return не завершает, а возвращает следующую за ним переменную или функцию. В данном случае возвращает print("bbbbb"). Если требуется использовать его, как завершение то пиши return true. В таком случае при вызове эта функция вернет true. Пример использования return в функиях с условием проверки: если переменная равна заданному числу - return true иначе return false.Для решения проблемы я использовал явное приведение типов. Так же появился еще один вопрос, почему этот код выводит строку bbbbb?
function a()print("aaaaa")returnprint("bbbbb")enda()По идее return должен завершать выполнение функции.
Posted 17.06.2013 - 11:06
Нет, так не работает, пишет ошибку. Думаю для прерывания лучше пользоваться do return end, который предложил Storm Whisper.Если требуется использовать его, как завершение то пиши return true.
Posted 17.06.2013 - 12:00
Да, действительно напрямую так сказать в "корне" функции использовать return нельзя. Да и логично это, ведь по сути в таком случае функция никогда не сможет быть выполнена до конца. Как я и приводил пример выше return нужно использовать например в условии. Иначе можно просто написать end. Например:Нет, так не работает, пишет ошибку. Думаю для прерывания лучше пользоваться do return end, который предложил Storm Whisper.Если требуется использовать его, как завершение то пиши return true.
Posted 17.06.2013 - 14:07
Это да, та функция что я описал не имеет смысла, но я думаю что выдавать ошибку не есть логично, было бы лучше выполнить код как есть, всё что после return проигнорировать, разве что выдать предупреждение(хотя встроенная среда разработки не имеет таких возможностей).Да, действительно напрямую так сказать в "корне" функции использовать return нельзя. Да и логично это, ведь по сути в таком случае функция никогда не сможет быть выполнена до конца. Как я и приводил пример выше return нужно использовать например в условии. Иначе можно просто написать end.
Posted 17.06.2013 - 14:34
Posted 17.06.2013 - 14:58
В чем же фигня то? Выше писал практическое применение return - в условиях сравнения к примеру. Вот простейший пример использования return: функция проверяет является ли ее переменная единицей, если да - возвращает true, иначе false.Lexor фигню поришь. Я же уже написал как надо return юзать в середине. ; тут ни при чём, возвращаемые значения пишутся в той же строке, что и return.
Posted 17.06.2013 - 15:21
Posted 17.06.2013 - 15:31
local tArgs={ [paste][/paste][paste][/paste][paste][/paste] }if tonumber(tArgs[1])==5 then print("Ok")else print("Nope")endтакой нет:
local tArgs={ [paste][/paste][paste][/paste][paste][/paste] }if tArgs[1]=5 then print("Ok")else print("Nope")endПолучается не преобразовал? Или это особенности tArgs всегда читать строки(ага с ним разбираюсь)?
Posted 17.06.2013 - 15:39
Posted 17.06.2013 - 15:40
почему этот код выводит строку bbbbb?
function a()print("aaaaa")returnprint("bbbbb")enda()По идее return должен завершать выполнение функции.
function a()print("aaaaa")return nilprint("bbbbb")enda()
Lua преобразовывает строку в число только при "+", "-", "/", "*", "%". Число в строку при "..". В массиве "..." все параметры string. И еще код кривой.Получается не преобразовал? Или это особенности tArgs всегда читать строки(ага с ним разбираюсь)?
local tArgs={ [paste][/paste][paste][/paste][paste][/paste] }if tArgs[1]==5 then print("Ok")else print("Nope")end
Posted 17.06.2013 - 15:47
Набирал от руки, лишнюю скобку поставил...А что такое )=? Смайлик, или я что-то не знаю об операциях сравнения?
0 members, 5 guests, 0 anonymous users