F#,该值不是函数和+运算符

时间:2014-03-05 12:39:19

标签: f#

此代码:

let extractTime line  =
    let result =  Regex.Match(line, "(\d\d):(\d\d):(\d\d)")
    let captureGroups = List.tail [for g in result.Groups -> g.Value]
    match captureGroups with
    | hrs::mins::secs::[] -> ((int hrs)*3600) + ((int mins)*60) +(int secs)
    | _ -> 0

给出错误:“此值不是函数且无法应用”代码的这一部分

((int mins)*60)

我把头撞了一会儿,然后在这里添加了一个空间

 + (int secs) 

完全取出空间也会使错误消失。 e.g。

((int hrs)*3600)+((int mins)*60)+(int secs)

我不明白为什么这个空间有所作为。有人可以向我解释一下。

1 个答案:

答案 0 :(得分:4)

这是因为+(int secs)被解释为一个值(+是一元运算符),在这种情况下((int mins)*60)需要是一个函数,因为它才有意义。当没有空格时,以下+不能被解释为除二元运算符之外的任何其他内容。您可以将它与以下简单的行进行比较:

> 1 + 2;;
val it : int = 3
> 1 +2;;

  1 +2;;
  ^

stdin(2,1): error FS0003: This value is not a function and cannot be applied
> 1 2;;

  1 2;;
  ^

stdin(3,1): error FS0003: This value is not a function and cannot be applied
> 12;;
val it : int = 12