Короткий ответ заключается в том, что F # иногда может отслеживать имена аргументов при печати типа функции. В этом случае arg00
- это неявное имя, сгенерированное компилятором для первого аргумента операции LexemeString
.
Более длинный ответ заключается в том, что F # немного несовместим при работе с аргументами функции. Если вы определяете функцию с помощью let
, вывод будет включать аргументы:
> let foo a b = a + b;;
val foo : a:int -> b:int -> int
Если вы просто указываете функцию как значение через ее имя, результат обрабатывается как значение функции (с круглыми скобками вокруг него ), а имена аргументов опускаются:
> foo;;
val it : (int -> int -> int) = <fun:it@4-2>
Однако, если вы определяете член stati c и получаете к нему доступ, то компилятор все равно пытается распечатать имена аргументов, но не может получить к ним доступ (поскольку теперь член был преобразован в значение), и поэтому он печатает неявно сгенерированные имена, такие как arg00
:
> type A =
static member Foo a b = a + b;;
type A = (...)
> A.Foo;;
val it : arg00:int -> arg10:int -> int