Краткий ответ - используйте +
вместо ^
, как предполагает предупреждение, операторы взаимозаменяемы.
Более длинный ответ: изучая FSharp.Core, вы обнаружите, что оба эти оператора встроены и имеют значение System.String.Concat
.
См. здесь для ^
:
let inline (^) (x:string) (y:string) = System.String.Concat(x,y)
и здесь для +
:
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 в то время, когда легкость переноса кода OCaml в F # считаласьважный пункт продажи для языка:
value prefix ^ : string -> string -> string
s1 ^ s2 returns a fresh string containing the concatenation of the strings s1 and s2.
Я не могу вспомнить, чтобы когда-либо видел код, использующий ^
на практике, и не смог бы сказать, что у F # был этот оператор, если бы вы спросили меня.