Weil dies die Größe der Datenstrukturen ist, die zum Speichern von Funktionsargumenten verwendet werden. Von eval.c
:
#define MAX_FUNC_ARGS 20 /* maximum number of function arguments */
/* structure to hold info for a function that is currently being executed. */
typedef struct funccall_S funccall_T;
struct funccall_S
{
[..]
listitem_T l_listitems[MAX_FUNC_ARGS]; /* listitems for a:000 */
[..]
};
[..]
/*
* Allocate a variable for the result of a function.
* Return OK or FAIL.
*/
static int
get_func_tv(
)
{
typval_T argvars[MAX_FUNC_ARGS + 1]; /* vars for arguments */
[..]
/*
* Get the arguments.
*/
argp = *arg;
while (argcount < MAX_FUNC_ARGS - (partial == NULL ? 0 : partial->pt_argc))
{
[..]
}
}
Nun und so weiter.
Könnte dies dynamisch gestaltet werden, um eine beliebige Anzahl von Argumenten zuzulassen? Sicher. Aber warum?
fun! TooManyForSanity(one, two, three, four, five, six, seven, eight, nine, ten, eleven, twelve, thirteen, fourteen, fifteen, sixteen, seventeen, eighteen, nineteen, twenty, twentyone)
echo "Well..."
endfun
call TooManyForSanity('one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'ten', 'eleven', 'twelve', 'thirteen', 'fourteen', 'fifteen', 'sixteen', 'seventeen', 'eighteen', 'nineteen', 'twenty', 'OH MY GOD IT NEVER ENDS')
Dies ist die Art von Code, die Programmierer verrückt macht und unschuldige Hasen im Schlaf ermordet.