为什么System.Char []输出而不是字符串值?

kat*_*tie 1 string f#

let reverseString (myStr: string)=
    myStr|>Seq.toList|>List.rev |> Array.ofList|>string
Run Code Online (Sandbox Code Playgroud)

我正在F#中为此功能工作。我运行上面的一个并想得到例如我做的结果

reverseString "abc"
Run Code Online (Sandbox Code Playgroud)

我希望它将显示出来,cba但实际上它返回System.Char []。那可能是问题所在,因为我想查看类似“ cba”的结果,而不是检查我做对了还是不正确。谢谢!

AMi*_*res 6

我认为问题可能是的构造函数System.Stringstring函数之间的混淆。

string该函数通过基本上调用ToString()将Char对象仅输出类型名称的字符串转换为字符串System.Char[]

另一方面System.String,该类有几个重载的构造函数,其中一个是char数组,因此会产生一个字符串:

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

  • 关于最后一行:如果您意识到``System.String''没有一个采用单个类型为``string''的参数的构造函数,这一点都不奇怪(https://docs.microsoft.com/cn -us / dotnet / api / system.string.-ctor?view = netframework-4.7.2)。 (2认同)