LINUX.ORG.RU

Помогите, пожалуйста, разобраться с кодом на Lua

 


0

1

Есть дополнение для Minecraft, называется ComputerCraft. Там можно роботов программировать на Lua. Есть код: http://pastebin.com/MyK0DFNq, он падает с ошибкой: «string:52 attempt to compare string with number expected, got string». В этой строке сравнивается переменная Grave, которая ранее считана с клавиатуры и содержит число. Выпадает вот такая ошибка. Если же переменную явно определить Grave=3, допустим, то всё работает. Были попытки перед сравнением преобразовать Grave=tonumber(Grave), так же как и написать индусизмы типа Grave=Grave*1. Если подать Grave на вывод - это и есть то самое число, которое мы вводили с клавиатуры. Пожалуйста, разъясните, что не так.

З.Ы. Код у вас работать не будет, ибо все эти turtle - фича ComputerCraft'а, но это не важно. Скорее всего, логическая или синтаксическая ошибка.

З.Ы.Ы. Мопед не мой, а друга. Он на Луа кодит только второй день.

★★

Последнее исправление: Valdor (всего исправлений: 1)

Были попытки перед сравнением преобразовать Grave=tonumber(Grave)

Grave=tonumber(read()), не?

ymn ★★★★★
()

Единственные сравнение на больше или меньше, которое у нас работает - строка 23, где if turtle.getItemCount(16)>0 and Chest==1 then и строка 30, где elseif turtle.getFuelLevel()<1 then exit() end

Valdor ★★
() автор топика
Последнее исправление: Valdor (всего исправлений: 1)
Ответ на: комментарий от Valdor

Ну посмотри вывод type(Grave) (или выражений, участвующих в сравнениях соответвстующей строки).

anonymous
()
Ответ на: комментарий от Valdor

Не сработало, ошибка та же.

Скорее всего ты нас обманываешь. Кстати, Torch и Chest тоже сравниваются с числами.

anonymous
()

Ты во-первых ошибку неправильно скопипастил, вырезав часть инфы, а во вторых если принт по к-л причинам недоступен, вызови сам перед проблемным местом ошибку: error(«type of grave: »..type(Grave)..(еще что-то по аналогии)). В трейсе увидишь свое сообщение.

Объяснятель из тебя нулевой, программист-обезьянка, уж не обессудь. Если были попытки, то какие результаты, если не работает, то какой трейс выкидывает. Ну ты понел.

anonymous
()
Ответ на: комментарий от anonymous

d тоже int, считанный с клавиатуры. До этого с ним нормально d+1, d-1 проходит.

Valdor ★★
() автор топика
Ответ на: комментарий от anonymous

Я не вырезал часть инфы. Это ровно то, что выдаёт игра (не интерпретатор, а именно игра). Программист тут _не_я_. Попозже чуть выложу результат type(Grave).

Valdor ★★
() автор топика
Ответ на: комментарий от Valdor

Я не вырезал часть инфы. Это ровно то, что выдаёт игра (не интерпретатор, а именно игра).

То есть игра выдаёт следующее неграмматичное предложение:

string:52 attempt to compare string with number expected, got string

Либо ты всё-так вырезал чего-то, либо где-то по дороге баг.

type(Grave)

Да, выложи его.

proud_anon ★★★★★
()
Последнее исправление: proud_anon (всего исправлений: 1)
Ответ на: комментарий от proud_anon

Я ничего не вырезал -

мопед не мой

Я выкладываю ту информацию, которую мне сообщает друг, которого нет на ЛОРе.

Тип Grave - nil. Тип d - string.

Valdor ★★
() автор топика
Ответ на: комментарий от Valdor

Тип Grave - nil

Судя по тому, что я вижу на pastebin, твой друг ниндзя-редактор указал тип «grave», а не «Grave»:

print(type(grave))

И вообще, можно же в топики и анонимно писать, без логина. Чего бы ему самому сюда не написать тогда?

Тип d - string

Ну так тогда надо сделать tonumber.

proud_anon ★★★★★
()
Последнее исправление: proud_anon (всего исправлений: 3)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.