For loop 为什么这个代码段可以';而“print(square(3,0))”可以吗?

For loop 为什么这个代码段可以';而“print(square(3,0))”可以吗?,for-loop,lua,For Loop,Lua,为什么这个代码段不能编译,而打印(square(3,0))可以吗 function square(iteratorMaxCount,currentNumber) if currentNumber<iteratorMaxCount then currentNumber = currentNumber+1 return currentNumber, currentNumber*currentNumber end end print(squ

为什么这个代码段不能编译,而
打印(square(3,0))
可以吗

function square(iteratorMaxCount,currentNumber)

   if currentNumber<iteratorMaxCount
   then
      currentNumber = currentNumber+1
      return currentNumber, currentNumber*currentNumber
   end
    
end

print(square(3,0))

for i,n in square(3,0)
do 
   print(i,n)
end
对于平方(3,0)中的i,n
相当于
对于1,1中的i,n
,这意味着您试图调用
1
,这不是一个函数,并导致错误
尝试调用数值

for循环定义中
中之后表达式列表中的第一个值需要是一个函数,例如处理表或数组时使用的对或IPAIR。如果在代码中使用某种自定义迭代器,如
square
,则需要创建一个函数,该函数将迭代器存储的限制定义为up值,并返回一个匿名函数,执行此操作的函数称为迭代器工厂

function square(iteratorMaxCount,currentNumber)
    return function()
        if currentNumber<iteratorMaxCount then
            currentNumber = currentNumber+1
            return currentNumber, currentNumber*currentNumber
        end
    end
end

print(square(3,0)())
print(square(3,0))

for i,n in square(3,0) do 
    print(i,n)
end
建议如下:

相关主题:


将正方形(3,0)中i,n的
替换为正方形(3,0)中i,n的
@Egor Skriptunoff您能回答这个问题吗?否则它将永远没有正式的答案。@AlexanderMashin-我没有答案。我的评论只是一个暗示。答案应该包括解释Lua中的泛型for循环是如何工作的。请随意写下答案。
function square(iteratorMaxCount,currentNumber)
    return function()
        if currentNumber<iteratorMaxCount then
            currentNumber = currentNumber+1
            return currentNumber, currentNumber*currentNumber
        end
    end
end

print(square(3,0)())
print(square(3,0))

for i,n in square(3,0) do 
    print(i,n)
end
for i,n in square,3,0 do 
    print(i,n)
end