Lua 5.1 lehnt die Verwendung der Tabelle arg
für varargs offiziell ab und bevorzugt ...
. Es gibt jedoch eine Kompilierzeitoption für Lua selbst, LUA_COMPAT_VARARG
, um die Verwendung von arg
in 5.1-Code zu ermöglichen.
Wenn LUA_COMPAT_VARARG
definiert wurde, als Lua kompiliert wurde, wird eine arg
-Tabelle in varargs-Funktionen erstellt und mit den Argumenten gefüllt - es sei denn, der Compiler erkennt die Verwendung von ...
in der Funktion. In diesem Fall wird davon ausgegangen, dass Sie varargs im 5.1-Format anstelle von 5.0 verwenden und die Tabelle nicht erstellen. It tut jedoch immer noch den lokalen Namen arg
!
Wenn% code% definiert ist, erhalten vararg Funktionen, die LUA_COMPAT_VARARG
nicht im Body enthalten, eine ...
mit der Argumentliste und vararg Funktionen, die tun Erhalte ein local arg
mit local arg
. Dieser Fehler ist in allen Versionen von 5.1 vorhanden und bedeutet insbesondere, dass Sie nicht auf einen globalen Wert oder upvalue mit dem Namen nil
von einer varargs-Funktion zugreifen können, wenn arg
zur Kompilierzeit definiert wurde.
Lua 5.2 lässt die Unterstützung für LUA_COMPAT_VARARG
-style varargs vollständig fallen und hat daher dieses Problem nicht, unabhängig davon, wie es zur Kompilierzeit konfiguriert wurde.
(Quelle: Die Änderungen in varargs, die zwischen 5.0 und 5.1 und die Option arg
betreffen, werden in Das Referenzhandbuch Lua 5.1, Abschnitt 7.1 . Das Handbuch verweist Sie auf luaconf.h < Das genaue Verhalten ist nirgendwo dokumentiert, soweit ich weiß, es kann experimentell bestimmt werden, indem man lparser.c und ldo.c , oder von der Einträge in der Mailingliste, die dieses Problem ursprünglich gemeldet haben.)
Tags und Links arguments function variadic-functions lua