f# - 这个表达式应该是int类型,但是这里有类型' a - > INT

时间:2016-07-06 14:33:53

标签: f#

我试图在f#中使用函数,但我现在发现了一个问题。

我创建了在数组和文件txt中添加数字的函数,但Visual Studio说我的代码中有一个错误。

功能是:

Exception

当我尝试调用该函数时,系统显示此消息:

  

这个表达式应该是int类型,但这里有类型' a - >   INT

有人知道这是什么意思??

1 个答案:

答案 0 :(得分:0)

如果将鼠标悬停在let fnAddNodeFileAndArray (pstrnode:string) lintRowResult:int =上,您会发现类型签名如下:

  

val fnAddNodeFileAndArray:pstrnode:string - > lintRowResult:' a - > INT

这意味着一个函数接受string,返回一个带lintRowResult的函数,最后返回一个int。因为你没有在lintRowResult周围放置paranthesis,所以F#认为你是注释函数的返回类型,而不是参数的输入类型。可能你想说这样的话:

let fnAddNodeFileAndArray (pstrnode:string) (lintRowResult:int) =

此函数的类型签名将变为:

  

val fnAddNodeFileAndArray:pstrnode:string - > lintRowResult:int - >   INT

这是一个带字符串和int的函数,然后返回一个int。所以它有两个参数。现在,如果您转到代码中的倒数第二行:lintrow <- fnAddNodeFileAndArray(lstrNode),您只有一个参数。所以你可能需要写下这样的东西: lintrow <- fnAddNodeFileAndArray lstrNode lintRow

现在很明显,您的fnAddNodeFileAndArray函数可能只是一个需要lstNode的函数,在这种情况下,请忽略lintRowResult输入参数:
fnAddNodeFileAndArray (pstrnode:string)

  

val fnAddNodeFileAndArray:pstrnode:string - &gt; INT

你可以看到F#知道函数的输出类型。

你应该认真对待@ GuyCoder的评论,关于在任何地方定义变量。代码读取非常紧迫,像python通过谷歌翻译...你可以发布在CodeReview它也相当长,包含外部引用和其他错误。使用较小的自包含示例,您将获得更好的运气,请参阅:MCVE