我试图在f#中使用函数,但我现在发现了一个问题。
我创建了在数组和文件txt中添加数字的函数,但Visual Studio说我的代码中有一个错误。
功能是:
Exception
当我尝试调用该函数时,系统显示此消息:
这个表达式应该是int类型,但这里有类型' a - > INT
有人知道这是什么意思??
答案 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