为什么将此表达式的返回类型计算为返回类型为unit-> int而不是int

时间:2020-07-14 15:36:12

标签: f#

我是F#的新手,正在编写一个将dateTime值转换为以秒为单位的unix时间戳的函数。 下面是我对这种功能的实现(仅使用内置功能并将其包装以供学习)。

let DateTimeToUnix x =
        let result = DateTimeOffset(x).ToUnixTimeSeconds
        result

预期的返回类型为:DateTime-> int64 实际的返回类型为:DateTime->(unit-> int64)

我试图找到类似的问题,但发现的最接近的问题是这样的(F# - The type int is not compatible with type unit) 但不幸的是,由于使用的函数的返回类型(ToUnixTimeSeconds)是int64而不是(unit-> int64),因此我不明白在这种情况下如何适用。

如果有人可以指出从何处了解此信息或可以解释其行为,那将是很好的。非常感谢您的宝贵时间。

2 个答案:

答案 0 :(得分:3)

ToUnixTimeSeconds方法,不是属性。在F#中,方法被建模为函数。无参数方法被建模为具有单个unit类型参数的函数。因此foo.ToUnixTimeSeconds的类型将是unit -> int64,就像编译器告诉您的那样。

要实际调用该函数并从中获取结果,请为其提供所需类型的参数-即unit

let DateTimeToUnix x =
    let result = DateTimeOffset(x).ToUnixTimeSeconds ()
    result

请注意,您实际上不必命名中间值result

let DateTimeToUnix x =
    DateTimeOffset(x).ToUnixTimeSeconds ()

答案 1 :(得分:1)

您必须先返回ToUnixTimeSeconds才能返回所需的返回类型:

let DateTimeToUnix x =
    let result = DateTimeOffset(x).ToUnixTimeSeconds() // invoke method: ()
    result