Skip to content

Goto

YueScript 支持 goto 语句和标签语法来控制程序流程,该语法遵循与 Lua 的 goto 语句相同的规则。注意: goto 语句需要 Lua 5.2 或更高版本。当编译目标是 Lua 5.1 时,使用 goto 语法将导致编译错误。

标签使用双冒号定义:

yuescript
::开始::
::结束::
::我的标签::
yue
::开始::
::结束::
::我的标签::

goto 语句可以跳转到指定的标签:

yuescript
a = 0
::开始::
a += 1
goto 结束 if a == 5
goto 开始
::结束::
print "a 现在是 5"
yue
a = 0
::开始::
a += 1
goto 结束 if a == 5
goto 开始
::结束::
print "a 现在是 5"

goto 语句对于跳出深层嵌套循环非常有用:

yuescript
for z = 1, 10
  for y = 1, 10 do for x = 1, 10
    if x^2 + y^2 == z^2
      print '找到勾股数:', x, y, z
      goto 完成
::完成::
yue
for z = 1, 10
  for y = 1, 10 do for x = 1, 10
    if x^2 + y^2 == z^2
      print '找到勾股数:', x, y, z
      goto 完成
::完成::

你也可以使用标签跳转到特定的循环层级:

yuescript
for z = 1, 10
  for y = 1, 10
    for x = 1, 10
      if x^2 + y^2 == z^2
        print '找到勾股数:', x, y, z
        print '尝试下一个 z...'
        goto 继续z
  ::继续z::
yue
for z = 1, 10
  for y = 1, 10
    for x = 1, 10
      if x^2 + y^2 == z^2
        print '找到勾股数:', x, y, z
        print '尝试下一个 z...'
        goto 继续z
  ::继续z::

注意事项

  • 标签在其作用域内必须唯一
  • goto 可以跳转到相同或外层作用域级别的标签
  • goto 不能跳转到内层作用域(如代码块或循环内部)
  • 谨慎使用 goto,因为它会使代码更难阅读和维护