我是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),因此我不明白在这种情况下如何适用。
如果有人可以指出从何处了解此信息或可以解释其行为,那将是很好的。非常感谢您的宝贵时间。
答案 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