此代码:
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)
我不明白为什么这个空间有所作为。有人可以向我解释一下。
答案 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