lua 中覆盖的函数有什么问题?
what is wrong with the function overwritten in lua?
function f()
return 1
end
function f(N)
if N == 42 then
return f()
else
return 2
end
end
f 被覆盖,但是 f(42) returns 2 而不是 1。为什么?这可能吗?
N
在第二次调用 f
时为零。
N
在第二种情况下是 nil
:
f(42)
递归调用 f()
。
您不能在 Lua 中重载函数。你可以 "redefine" 它。所以:
function f(N)
if N == 42 then
return f()
else
return 2
end
end
N = 42,所以你用N == nil
调用F(N)
,然后它returns 2.
您的代码等同于:
f = function ()
return 1
end
f = function (N)
if N == 42 then
return f()
else
return 2
end
end
print(f(42))
第一个赋值创建一个函数值并将其赋值给f
。
第二个赋值创建了一个不同的函数值并将其赋值给 f
。 (第一个函数值现在已经死了。)
第三条语句调用f
的值作为参数为42
的函数。
正如其他人所解释的那样,在第二个函数中,return f()
将 f
的值作为不带参数的函数进行调用。 f
在该点的值是第二个函数。所以,在第二次调用中,N
是 nil
.
function f()
return 1
end
function f(N)
if N == 42 then
return f()
else
return 2
end
end
f 被覆盖,但是 f(42) returns 2 而不是 1。为什么?这可能吗?
N
在第二次调用 f
时为零。
N
在第二种情况下是 nil
:
f(42)
递归调用 f()
。
您不能在 Lua 中重载函数。你可以 "redefine" 它。所以:
function f(N)
if N == 42 then
return f()
else
return 2
end
end
N = 42,所以你用N == nil
调用F(N)
,然后它returns 2.
您的代码等同于:
f = function ()
return 1
end
f = function (N)
if N == 42 then
return f()
else
return 2
end
end
print(f(42))
第一个赋值创建一个函数值并将其赋值给f
。
第二个赋值创建了一个不同的函数值并将其赋值给 f
。 (第一个函数值现在已经死了。)
第三条语句调用f
的值作为参数为42
的函数。
正如其他人所解释的那样,在第二个函数中,return f()
将 f
的值作为不带参数的函数进行调用。 f
在该点的值是第二个函数。所以,在第二次调用中,N
是 nil
.