LexBuffer.LexemeString;; val it : arg-6ren">
gpt4 book ai didi

f# - LexBuffer.LexemeString 类型中的 "arg00"是什么?

转载 作者:行者123 更新时间:2023-12-04 09:15:41 26 4
gpt4 key购买 nike

Fsharp.Text.Lexing 类型中的“arg00”是什么?的 LexBuffer<char>.LexemeString ?

> LexBuffer<char>.LexemeString;;
val it : arg00:LexBuffer<char> -> string

最佳答案

简短的回答是 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>
但是,如果您定义了一个静态成员并访问它,那么编译器仍会尝试打印参数名称,但无法访问它们(因为该成员现在已转换为值),因此它会打印隐式生成的名称,如 arg00 :
> type A = 
static member Foo a b = a + b;;
type A = (...)

> A.Foo;;
val it : arg00:int -> arg10:int -> int

关于f# - LexBuffer<char>.LexemeString 类型中的 "arg00"是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63231859/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com