gpt4 book ai didi

types - 这种构造导致代码的通用性低于类型注释所指示的通用性。类型变量 'x has been constrained to be type y'

转载 作者:行者123 更新时间:2023-12-04 13:41:38 24 4
gpt4 key购买 nike

此代码将生成以下警告

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}

警告:

This construct causes code to be less generic than indicated by the type annotations. The type variable 'double has been constrained to be type 'int'.



我对F#相当陌生,我认为5可以解释为int,而F#告诉我我要了一个double值,但它将是int。

当我尝试用 5替换 5.时,这告诉我它仍然受float类型的约束。

我应该以某种方式将其强制转换为 double 还是只删除声明部分 : TimedValue<'double>并让F#处理类型?

最佳答案

删除double之前的撇号。

let t : TimedValue<double> = { ts = DateTime.Today; value=5.0}

前导撇号用于声明类型参数。因此,您已经声明了通用值,但是通过指定 value=5,已将arg类型的约束为 int。您也可以使用通配符代替arg类型:
let t : TimedValue<_> = { ts = DateTime.Today; value=5.0}

或完全删除类型注释:
let t = { ts = DateTime.Today; value=5.0}

关于types - 这种构造导致代码的通用性低于类型注释所指示的通用性。类型变量 'x has been constrained to be type y',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13020030/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com