我正在阅读docs并点击了本段
有两种连接字符串的方法:使用+运算符或使用^运算符。 +运算符保持与.NET Framework字符串处理功能的兼容性。
我将它砸入了linqpad,它运行正常,但是我得到了警告
此构造用于ML兼容性。考虑改用'+'运算符
在网上搜索了更多详细信息,但想到了nix。
任何人都可以详细说明^的预期功能吗?
答案 0 :(得分:11)
简短答案-使用+
而非警告提示的^
,操作符可以互换。
更长的答案:查看FSharp.Core,您会发现这两个运算符都已内联并遵从System.String.Concat
。
有关^
,请参见here:
let inline (^) (x:string) (y:string) = System.String.Concat(x,y)
和here代表+
:
let inline (+) (x: ^T) (y: ^U) : ^V =
AdditionDynamic<(^T),(^U),(^V)> x y
...
when ^T : string and ^U : string =
(# "" (System.String.Concat((# "" x : string #),(# "" y : string #))) : ^T #)
+
的定义更为复杂,但归结为同一件事。
^
似乎是F#中许多(实际上是过时的)构造中的一种,而在将OCaml代码轻松移植到F#的情况下,这种构造很容易被OCaml所采用语言:
value prefix ^ : string -> string -> string
s1 ^ s2 returns a fresh string containing the concatenation of the strings s1 and s2.
我真的不记得在实践中曾经使用^
看到过代码,也无法告诉F#如果您问过我这个运算符。