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

Ord*_*nge 13 .net f#

我正在阅读文档并点击了该段落

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

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

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

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

谁能详细说明^的预期功能?

scr*_*wtp 13

简短的回答- 操作员可以互换使用,+而不是^像警告中所提示的那样。

更长的答案:查看FSharp.Core,您会发现这两个运算符都内联并遵循System.String.Concat

这里^

let inline (^)     (x:string) (y:string) = System.String.Concat(x,y)
Run Code Online (Sandbox Code Playgroud)

这里+

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 #)
Run Code Online (Sandbox Code Playgroud)

+定义是更复杂,但熬煮至同样的事情。

^在将OCaml代码轻松移植到F#被认为是该语言的重要卖点之时,OCaml似乎采用了F#中许多(实际上是过时)的构造之一。

value prefix ^ : string -> string -> string
s1 ^ s2 returns a fresh string containing the concatenation of the strings s1 and s2.
Run Code Online (Sandbox Code Playgroud)

我真的不记得曾经^在实践中看到过使用代码,也无法告诉F#如果您问过我是否有这个运算符。

  • 无疑,第一个语言是ML,属于F#语言家族。 (3认同)