以下代码具有未定义的标签room3。我怎么能解决这个错误?
function room1 ()
local move = io.read()
if move == "south" then goto room3
elseif move == "east" then return room2()
else
print("invalid move")
return room1() -- stay in the same room
end
end
function room2 ()
local move = io.read()
if move == "south" then return room4()
elseif move == "west" then return room1()
else
print("invalid move")
return room2()
end
end
::room3::
do
local move = io.read()
if move == "north" then return room1()
elseif move == "east" then return room4()
else
print("invalid move")
goto room3
end
end
function room4 ()
print("congratulations!")
end
-- We start the game with a call to the initial room:
room1()
另一方面,这段代码完美无缺:
goto room1
::room1:: do
local move = io.read()
if move == "south" then goto room3
elseif move == "east" then return room2()
else
print("invalid move")
goto room1
end
end
::room2:: do
local move = io.read()
if move == "south" then goto room4
elseif move == "wast" then goto room1
else
print("invalid move")
return room2()
end
end
::room3:: do
local move = io.read()
if move == "north" then goto room1
elseif move == "east" then goto room4
else
print("invalid move")
goto room3
end
end
::room4:: do
print "Congratulations, you won!"
end
答案 0 :(得分:2)
room1()
的范围内无法看到 goto
。
来自Lua参考:
在定义它的整个块中可以看到标签,除了 嵌套块内部定义了具有相同名称的标签 嵌套函数内部。 goto可以跳转到任何可见标签 因为它没有进入局部变量的范围。
因此,您无法使用room3
跳转到某个功能或其中。
你不能跳入函数,因为标签将在函数内部,因此它在外面是不可见的。而且你不能跳出一个函数,因为你无法从函数内部看到外部标签。
我宁愿使用递归函数调用。我认为你没有理由要实现与其他房间不同的function room3()
local move = io.read()
if move == "north" then return room1()
elseif move == "east" then return room4()
else
print("invalid move")
return room3()
end
end
。
room1
另请注意,当您在function room2
向东行进时,您的工作示例会导致错误,因为def suma[T](args: WrappedArray[T]*)(implicit n: Numeric[T]) = {
args.transpose.map(_.sum)
}
def sum[T](arr: WrappedArray[WrappedArray[T]])(implicit n: Numeric[T]) = {
val result = suma( ______ )
}
未定义。