此代码将生成以下警告
module TimeSeries
open System
type TimedValue<'T> = { ts : DateTime; value: 'T}
type TimeSerie<'T> = TimedValue<'T> seq
let t : TimedValue<'double> = { ts = DateTime.Today; value=5}
Run Code Online (Sandbox Code Playgroud)
警告:
此构造使代码不如类型注释所指示的那样通用.类型变量'double已被约束为类型'int'.
我对F#很新,我认为5被解释为一个int,不知怎的,F#告诉我,我问了一个双,但它将是一个int.
当我尝试更换时5,5.告诉我它仍然受浮动类型的限制.
我应该以某种方式将其转换为double或只删除声明部分: TimedValue<'double>并让F#处理类型?
Dan*_*iel 12
之前删除撇号double.
let t : TimedValue<double> = { ts = DateTime.Today; value=5.0}
Run Code Online (Sandbox Code Playgroud)
前导撇号用于声明类型参数.所以,你已经声明了一个通用值,但是,通过指定value=5你已经将类型arg约束为int.您还可以使用通配符代替arg类型:
let t : TimedValue<_> = { ts = DateTime.Today; value=5.0}
Run Code Online (Sandbox Code Playgroud)
或完全删除类型注释:
let t = { ts = DateTime.Today; value=5.0}
Run Code Online (Sandbox Code Playgroud)