Lua ‹eof› ожидается рядом с надписью print

У меня проблемы с lua.

Проблема первая. Каждый раз, когда я запускаю следующую программу, консоль сообщает мне:

ожидается конец (чтобы закрыть функцию в строке 1) рядом с локальным

Обратите внимание, где я отметил в комментариях заглавными буквами подробности об ошибке.

function m11()
    local inst = mc.mcGetInstance() -- controller instance
    local gcodeLineNbr = mc.mcCntlGetGcodeLineNbr(inst) -- get current Gcode line number
    local gcodeLineStr = mc.mcCntlGetGcodeLine(inst, gcodeLineNbr)  -- get current Gcode line


    function valFromLine(string, axis)
        local startPoint = string.find(string, axis) + 1
        local outputVal = ""
        local isNum = true
        while isNum do
            local num = string.sub(string, startPoint, startPoint)
            startPoint = startPoint + 1
            if num ~= " " then
                outputVal = outputVal .. num
            else
                isNum = false
            end
        end
        outputVal = tonumber(outputVal)
    end
    return outputVal

    --COMPILER HIGHLIGHTS FOLLOWING LINE AS LOCATION OF ERROR
    local gcodeLocX = valFromLine(gcodeLineStr, "X")
    local curLocX = mc.mcAxisGetPos(inst, 0)        -- get current X axis value
    local curLocY = mc.mcAxisGetPos(inst, 1)        -- get current Y axis value
    local curLocZ = mc.mcAxisGetPos(inst, 2)        -- get current Z axis value
    local curAngB = mc.mcAxisGetPos(inst, 4)        -- get current C axis value
    local curAngC = mc.mcAxisGetPos(inst, 5)        -- get current C axis value
    local toolOffset = mc.mcCntlGetToolOffset(inst, 2)  -- get tool offset for axis Z

    function rotateToolB()
        local comHypot = toolOffset * math.sin(angle)       -- get XY planar dist from C pivot to tool centre point
        local compDestinX = comHypot * math.sin(math.rad(90) - curAxisC + curLocX
    end
end
--END OF M11() FUNCTION SHOULD BE HERE

if (mc.mcInEditor() == 1) then
    m11()
end

Я не понимаю, почему он ожидает, что m11 () закроется так рано.

Проблема вторая: я переписал valFromLine () в совершенно отдельный файл и получил:

'eof' ожидается рядом с 'print'

function valFromLine(string, axis)
    local startPoint = string.find(string, axis) + 1
    local outputVal = ""
    local isNum = true
    while isNum do
        local num = string.sub(string, startPoint, startPoint)
        startPoint = startPoint + 1
        if num ~= " " then
            outputVal = outputVal .. num
        else
            isNum = false
        end
    end
  outputVal = tonumber(outputVal)
end
return outputVal

print(valFromLine("GO1 X254.348 Y1039.456 Z150.13 B90.23 C13 M11", "X"))

Я посчитал свои «конечные» операторы, я не могу найти, что с ними не так ни в одном из примеров кода. На данный момент у меня нет идей, пожалуйста, помогите. Спасибо.


person Inertia    schedule 12.03.2016    source источник


Ответы (1)


Строка return outputVal находится в неправильном положении. Переместите его в функцию valFromLine. Вы не можете вернуться за пределы функции.

верный:

function someFunction()
  -- do something
  local something = "something"
  return something
end

неправильный:

function someFunction()
  -- do something
  local something = "something"
end
return something

Определение глобальных функций с помощью функции также не очень чисто, используйте локальные переменные.

person Piglet    schedule 12.03.2016
comment
Не забывайте, что это должно быть последним элементом функции. - person warspyking; 12.03.2016
comment
Вы можете вернуться извне функции. Или, точнее, вы не можете выйти за пределы функции, потому что файлы в Lua неявно являются функциями vararg. Фактическая ошибка в том, что у вас не может быть больше операторов после оператора return, поэтому строка print не работает. - person Colonel Thirty Two; 12.03.2016
comment
@ColonelThirtyTwo Я написал функцию. Извините, если это было недостаточно точно. Спасибо за подсказку. - person Piglet; 12.03.2016
comment
Это сработало, спасибо warspyking. Я подумал, что мое размещение было правильным, потому что я ссылался на руководство по API для программы, оно показывает пример, где «return» написано после «end». Как вы могли догадаться, я только начал изучать Lua для этого проекта. Спасибо еще раз. - person Inertia; 13.03.2016