Какова цель оператора конкатенации строк F # ^ - PullRequest
12 голосов
/ 08 июня 2019

Я читал документы и попал в этот абзац

Существует два способа объединения строк: с помощью оператора + или с помощью оператора ^.Оператор + поддерживает совместимость с функциями обработки строк .NET Framework.

Я встроил его в linqpad, и он работает нормально, но я получаю предупреждение

Эта конструкция предназначена для совместимости с ML.Попробуйте вместо этого использовать оператор «+»

Был ли поиск по сети для получения дополнительной информации, но он придумал nix.

Может кто-нибудь рассказать о предназначенной функции ^?

1 Ответ

11 голосов
/ 08 июня 2019

Краткий ответ - используйте + вместо ^, как предполагает предупреждение, операторы взаимозаменяемы.

Более длинный ответ: изучая 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 # был этот оператор, если бы вы спросили меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...