Abstract base class for Java function implementations that takes varaiable arguments and returns multiple return values.
Subclasses need only implement {@link LuaValue#invoke(Varargs)} to complete this class, simplifying development. All other uses of {@link #call(LuaValue)}, {@link #invoke()},etc, are routed through this method by this class, converting arguments to {@linnk Varargs} and dropping or extending return values with {@code nil} values as required.
If between one and three arguments are required, and only one return value is returned, {@link ZeroArgFunction}, {@link OneArgFunction}, {@link TwoArgFunction}, or {@link ThreeArgFunction}.
See {@link LibFunction} for more information on implementation libraries and library functions.
@see #invoke(Varargs)
@see LibFunction
@see ZeroArgFunction
@see OneArgFunction
@see TwoArgFunction
@see ThreeArgFunction