6

このコードは次の警告を生成します

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}

警告:

この構成により、コードは型注釈で示されるよりも一般的ではなくなります。型変数「double」は「int」型に制限されています。

私はF#にかなり慣れていません.5はintとして解釈され、どういうわけかF#はdoubleを要求したがintになると言っています.

これに置き換えようと5すると5.、まだフロート型に制約されていることがわかりました。

どうにかして二重にキャストするか、宣言部分: TimedValue<'double>を削除して F# に型を処理させる必要がありますか?

4

1 に答える 1

12

の前のアポストロフィを削除します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}
于 2012-10-22T21:20:02.310 に答える