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 在该点的值是第二个函数。所以,在第二次调用中,Nnil.