2016-09-15 14 views
3

彼らは型の別名であることに私はいつも、交換するタイプfloat32singleを検討しています。 floatdoubleに同じ。しかし、彼らは異なるアセンブリMicrosoft.FSharp.Core.OperatorsMicrosoft.FSharp.Core.ExtraTopLevelOperators内で宣言されているように見えます。シングルとダブルの対フロート対のfloat32の違いがあれば、何ですか?

さらに、F#がfloat32floatの場合、文字列を使用してParse()を使用できるという点で、ポップアップの説明は少し異なります。

しかし、singledoubleであまりにもうまく成功したことをしよう:

let x = single "12.3" 
let y = double "13.4" 

私が知っておくべき何か違いはありますか?

// on hovering, or in FSI, this will have the slightly confusing signature: 
// val x: a: double -> float 
let x (a: double) = float a 
+0

'System.Object.ReferenceEquals(typeof演算 typeof演算);; System.Object.ReferenceEquals(typeof演算、typeof演算);; ' – PetSerAl

+0

@PetSerAl:彼らは(あなたの提案は理にかなっていると、彼らが実際に等しい)参照上等しい場合、どのように彼らのUIの違いとで異なる場所を説明しますアセンブリ?それともちょうどF#のマインド・トリックですか? – Abel

答えて

3

それらのすべては、あなたがprim-types-prelude.fsで見ることができるように、対応するCLR型の単なる別名である:私はポップアップ内と署名の違いを見るまで私はいつも、彼らは、交換可能に、実際にそれを別の考えを与えたことはない使用していました。混乱署名用として

はこの考えてみます。

type typA = A;; 

type typB = typA;; 

let f (x : typA) = (x : typB) 
//val f : x:typA -> typB 

F#は、あなた(または他のいくつかの定義が)それらを使用場所で別名を使用することを好むようです。

最後に、あなたが(FSharp.Core.Operators)を参照している名前空間は、floatタイプしかしfloat機能float : 'T -> float)にない言及しています。 prim-types.fsを参照してください。

+0

ポインタをありがとう。もちろん、ExtraTopLevelOperatorsは関数用です。私は誤ってそれがタイプの場所であると仮定しました。機能が異なって配置されていて、異なるツールチップを持っているのは変わっていませんが、(私が言うことができる限り)同じように動作します。 – Abel

関連する問題