Lua <eof> 预期在 'print' 附近

我在 lua 中遇到了问题。

问题一: 每次运行下面的程序,控制台都会告诉我:

'end' 期望 (在第 1 行关闭的 'function' 附近) 在 'local' 附近

请注意我在所有大写的注释中标记错误的详细信息

function m11()
    local inst = mc.mcGetInstance() -- 控制器实例
    local gcodeLineNbr = mc.mcCntlGetGcodeLineNbr(inst) -- 获取当前的 Gcode 行号
    local gcodeLineStr = mc.mcCntlGetGcodeLine(inst, gcodeLineNbr)  -- 获取当前的 Gcode 行

    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

    --编译器将以下一行视为错误位置
    local gcodeLocX = valFromLine(gcodeLineStr, "X")
    local curLocX = mc.mcAxisGetPos(inst, 0)        -- 获取当前 X 轴值
    local curLocY = mc.mcAxisGetPos(inst, 1)        -- 获取当前 Y 轴值
    local curLocZ = mc.mcAxisGetPos(inst, 2)        -- 获取当前 Z 轴值
    local curAngB = mc.mcAxisGetPos(inst, 4)        -- 获取当前 C 轴值
    local curAngC = mc.mcAxisGetPos(inst, 5)        -- 获取当前 C 轴值
    local toolOffset = mc.mcCntlGetToolOffset(inst, 2)  -- 获取轴 Z 的工具偏移

    function rotateToolB()
        local comHypot = toolOffset * math.sin(angle)       -- 获取从 C 枢轴到工具中心点的 XY 平面距离
        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(),但我却得到了:

意外的文件结尾 在 '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"))

我已经数过我的 'end' 语句了,我找不到这两个代码中的错误在哪里。我完全失去了主意,请帮帮我。谢谢。

点赞
用户2858170
用户2858170

以下为中文翻译,且原本的 markdown 格式保留:

代码行 return outputVal 的位置不正确。将其移动到函数 valFromLine 中。 你不能在函数外返回结果。

正确的代码示例:

function someFunction()
  -- 做些什么
  local something = "something"
  return something
end

错误的代码示例:

function someFunction()
  -- 做些什么
  local something = "something"
end
return something

在函数内定义全局函数也不是很干净,使用局部变量。

2016-03-12 13:03:59