Lua 中被覆盖的函数有什么问题?

f 被覆盖了,但 f(42) 返回的是 2 而不是 1。为什么?这可能吗?

点赞
用户107090
用户107090

第二次调用 f 时,Nnil

2015-02-13 13:40:51
用户752976
用户752976

在第二种情况下,Nnil

f(42)递归调用f()

2015-02-13 13:40:59
用户3772835
用户3772835

在 Lua 中,无法重载函数。你只能"重新定义"它。所以:

function f(N)
  if N == 42 then
    return f()
  else
    return 2
  end
end

当 N = 42 时,你调用 F(N) 时,Nnil,然后它返回 2。

2015-02-13 13:41:28
用户2226988
用户2226988

你的代码等价于:

f = function()
  return 1
end

f = function(N)
  if N == 42 then
    return f()
  else
    return 2
  end
end

print(f(42))

第一行代码将一个函数赋值给 f

第二行代码将一个不同的函数赋值给 f。(第一个函数值现在已经无效)

第三行代码使用参数 42 调用 f

正如其他人所解释的那样,第二个函数中的 return f()f 的值作为一个函数调用,不带任何参数,此时 f 的值为第二个函数。所以,在第二次调用时,N 的值为 nil

2015-02-14 03:42:53