此函数中存在奇怪的(?)类型不匹配错误

时间:2013-03-12 22:26:54

标签: f#

有人可以解释为什么编译器会给我这个错误

  

类型不匹配。期待一个       'a [] - >串
  但给了一个       'a [] - > 'a []
  类型'string'与'a []'

类型不匹配

在此代码段中:

let rotate s: string = 
  [|for c in s -> c|] 
  |> Array.permute (function | 0 -> (s.Length-1) | i -> i-1)

而下面的那个编译得很好:

let s = "string"
[|for c in s -> c|] 
|> Array.permute (function | 0 -> (s.Length-1) | i -> i-1)

1 个答案:

答案 0 :(得分:5)

您的第一个代码段定义了函数rotate,其返回类型为string

尝试将其更改为:

let rotate (s: string) = 
  [|for c in s -> c|] 
  |> Array.permute (function | 0 -> (s.Length-1) | i -> i-1)

在这种形式中,你定义一个带有一个字符串参数的函数(我想这就是你想要的)和推断的返回类型。