F# 标准库实现中的(#…#)语法是什么?
在阅读Array2D模块的源代码时,我在实现许多核心功能时偶然发现了这个有趣的结构,例如:F# 标准库实现中的(#…#)语法是什么?,f#,cil,F#,Cil,在阅读Array2D模块的源代码时,我在实现许多核心功能时偶然发现了这个有趣的结构,例如: [<CompiledName("Get")>] let get (array: 'T[,]) (n:int) (m:int) = (# "ldelem.multi 2 !0" type ('T) array n m : 'T #) 这到底是什么?有详细的文档吗?我认为这有两个目的: 这些函数可以精确编译成1条CIL指令,这些指令必须在某个地方进行编码,因此在源代码处进行编码似乎是最好的
[<CompiledName("Get")>]
let get (array: 'T[,]) (n:int) (m:int) = (# "ldelem.multi 2 !0" type ('T) array n m : 'T #)
这到底是什么?有详细的文档吗?我认为这有两个目的:
Add
函数,这在F#type系统中很难实现实际上,您可以使用它,但必须在代码中指定
--编译fslib
(未记录)和--standalone
标志。我在usenet存档中找到了一些详细信息:
在F#代码中嵌入IL。官方支持此功能吗
不是真的。此功能的99.9%用于定义的操作
在FSharp.Core.dll中(在1.9.2.9及之前的版本中称为fslib.dll)
历史上,允许最终用户按顺序嵌入IL是很有用的
访问F#库或服务器无法访问的.NET IL功能
语言构造使用自己的嵌入式IL。这是必要的
现在F#
图书馆已经成熟了一点。我们预计这将继续是最重要的
案例甚至有可能,我们将使它成为一个库唯一的功能
在F#的“产品”版本中,尽管我们尚未做出最终决定
这方面的决定
这是Don Syme于2008年1月发来的一条消息。看起来像是一张困惑的脸,我理解好奇,但我认为这条警告只在F#library中使用,这是一个信号,我们任何人都不需要使用:-)你可能想把你发现的作为答案,而不是编辑成问题。酷,我已经编辑了这个问题,并将该部分移到了答案中。@OnorioCatenacci我想忽略它,但简单的现实是F#IntelliSense说我的一些let表达式具有这种类型。这似乎发生在我写的时候:
let(a,b,c)=……
太棒了!你在哪里找到了这些编译器选项?@e-i-s-有一个源文件,它把它们都放在了某个地方-虽然不太确定在哪里-在源代码中搜索独立的
可能会有所帮助。这个答案并不能解释为什么某些VS2019 IntelliSense推断类型签名有(#a->单位)*float*SomeType list)
-如果我遗漏了一些我应该从答案中推断出来的东西,我表示歉意。我想我已经弄明白了-#a是一个灵活的类型-接受a的任何子类型。这个答案不能解释为什么某些VS2019 IntelliSense推断类型签名有(#a->unit)*float*SomeType list)
-如果我遗漏了一些我应该从答案中推断出来的东西,我表示歉意。我想我发现了-#a是一种灵活的类型-接受a的任何子类型。
warning FS0042: This construct is deprecated: it is only for use in the F# library