F#定义函数输入类型/防止类型不匹配

时间:2016-10-13 11:51:11

标签: function f# type-mismatch

我应该首先对F#说新手,并且毫无疑问这是一个菜鸟问题。

我现在已经做了两个月的F#而且我一般都觉得F#令人沮丧的事情就是这样的错误。 “这里预计有类型的东西,但给了其他类型的东西。”

我记得我的老师说,与其他语言不同,F#不能自己弄清楚你指的是什么类型。

所以我的问题是你们如何定义函数输入的类型?

示例:

let FoneTwo y x =
  System.Math.Sqrt(x^2+y^2)

printfn "%A" (FoneTwo 2.2 3.3)

这个错误表明浮点数是预期的,但是类型为String。这个字符串来自何处?在函数调用im中明确使用浮点数。所以我想我需要以某种方式指定y和x是一个浮点但是如何?

总的来说,我不仅在回答这个例子之后,而且是一个跟踪这个问题的一般规则或方法吗?因为通常情况会发生很多。

有人可以开导我吗?

1 个答案:

答案 0 :(得分:4)

请注意,运算符^不是幂,它是字符串连接(用于ML兼容性)。

您应该使用pown功能:

System.Math.Sqrt(pown x 2 + pown y 2)

您可以将其缩短为:

sqrt(pown x 2 + pown y 2)

有一个运算符**可用,但这是浮点数,因此您必须将代码更改为:

sqrt (x ** 2.0 + y ** 2.0)

但我会改用pown