F#字符串连接运算符^的作用是什么

时间:2019-06-08 12:44:02

标签: .net f#

我正在阅读docs并点击了本段

  

有两种连接字符串的方法:使用+运算符或使用^运算符。 +运算符保持与.NET Framework字符串处理功能的兼容性。

我将它砸入了linqpad,它运行正常,但是我得到了警告

  

此构造用于ML兼容性。考虑改用'+'运算符

在网上搜索了更多详细信息,但想到了nix。

任何人都可以详细说明^的预期功能吗?

1 个答案:

答案 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#如果您问过我这个运算符。

相关问题