ПопробуйНужна функция выхода из программы, кто-то подскажет?
error()
Написал 16.06.2013 - 16:59
ПопробуйНужна функция выхода из программы, кто-то подскажет?
error()
Написал 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 должен завершать выполнение функции.
Написал 16.06.2013 - 19:48
Написал 16.06.2013 - 20:13
Написал 16.06.2013 - 20:20
Написал 16.06.2013 - 20:49
Похоже, что надо писать return nil, но тогда он не видит end, из-за чего приходится писать так:Так же появился еще один вопрос, почему этот код выводит строку bbbbb? По идее return должен завершать выполнение функции.
ЗЫ луа умный язык, так что '1'+'2'=3Return (или break) должен быть последним оператором в блоке (иначе следующие за ним операторы никогда не выполнятся). Если действительно необходимо вставить return или break в середину блока, то следует применить составной оператор, например do return end и do break end.
Написал 16.06.2013 - 21:43
Написал 16.06.2013 - 21:50
Написал 16.06.2013 - 22:21
Я так понял в lua знак "+" выступает только в роли арифметического оператора, и при использовании срабатывает неявное приведение типов(для string-ов), например в C++ "+", и конкатенация, и ар. оператор.Неа, Луа всегда автоматически пытается конвертнуть тип переменной. А вот '12'=='1'..'2'
Окай, уже.ЗЫ цитату бы в спойлер спрятал..
Написал 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 должен завершать выполнение функции.
Написал 17.06.2013 - 11:06
Нет, так не работает, пишет ошибку. Думаю для прерывания лучше пользоваться do return end, который предложил Storm Whisper.Если требуется использовать его, как завершение то пиши return true.
Написал 17.06.2013 - 12:00
Да, действительно напрямую так сказать в "корне" функции использовать return нельзя. Да и логично это, ведь по сути в таком случае функция никогда не сможет быть выполнена до конца. Как я и приводил пример выше return нужно использовать например в условии. Иначе можно просто написать end. Например:Нет, так не работает, пишет ошибку. Думаю для прерывания лучше пользоваться do return end, который предложил Storm Whisper.Если требуется использовать его, как завершение то пиши return true.
Написал 17.06.2013 - 14:07
Это да, та функция что я описал не имеет смысла, но я думаю что выдавать ошибку не есть логично, было бы лучше выполнить код как есть, всё что после return проигнорировать, разве что выдать предупреждение(хотя встроенная среда разработки не имеет таких возможностей).Да, действительно напрямую так сказать в "корне" функции использовать return нельзя. Да и логично это, ведь по сути в таком случае функция никогда не сможет быть выполнена до конца. Как я и приводил пример выше return нужно использовать например в условии. Иначе можно просто написать end.
Написал 17.06.2013 - 14:34
Написал 17.06.2013 - 14:58
В чем же фигня то? Выше писал практическое применение return - в условиях сравнения к примеру. Вот простейший пример использования return: функция проверяет является ли ее переменная единицей, если да - возвращает true, иначе false.Lexor фигню поришь. Я же уже написал как надо return юзать в середине. ; тут ни при чём, возвращаемые значения пишутся в той же строке, что и return.
Написал 17.06.2013 - 15:21
Написал 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 всегда читать строки(ага с ним разбираюсь)?
Написал 17.06.2013 - 15:39
Написал 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
Написал 17.06.2013 - 15:47
Набирал от руки, лишнюю скобку поставил...А что такое )=? Смайлик, или я что-то не знаю об операциях сравнения?
0 пользователей, 9 гостей, 0 анонимных