Почему вывод System.Char [], а не значение строки? - PullRequest
1 голос
/ 18 марта 2019
let reverseString (myStr: string)=
    myStr|>Seq.toList|>List.rev |> Array.ofList|>string

Я работаю в F # для этой функции.Я запускаю вышеупомянутый и хочу получить результат, например, я сделал

reverseString "abc"

Я ожидал, что он покажет cba, но на самом деле он возвращает System.Char [].Так в чем может быть проблема, потому что я хочу видеть этот результат, например, "cba", чтобы проверить, правильно ли я поступаю или нет.Спасибо!

1 Ответ

6 голосов
/ 18 марта 2019

Я думаю, что проблема может заключаться в путанице между конструктором System.String и string функции.

string функция преобразует любой объект в строку, в основном вызывая ToString(), который для массива Char просто выводит имя типа: System.Char[].

С другой стороны, System.String класс имеет несколько перегруженных конструкторов, один из которых является массивом символов, поэтому он создает строку:

[| 'a'; 'b'; 'c'|] |> string  |> printfn "%A" //   "System.Char[]"
[| 'a'; 'b'; 'c'|].ToString() |> printfn "%A" //   "System.Char[]"
[| 'a'; 'b'; 'c'|] |> String  |> printfn "%A" //   "abc" 

6                  |> string  |> printfn "%A" //   "6"
6                 .ToString() |> printfn "%A" //   "6"
6                  |> String  |> printfn "%A" //  error: no overloads for int

"abc"              |> string  |> printfn "%A" //   "abc"
"abc"             .ToString() |> printfn "%A" //   "abc"
"abc"              |> String  |> printfn "%A" //   Strangelly enough gives error too
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...