2010-11-10 18 views
6

Bir ölçü birimi tanımladığımı varsayalım:Neden ünitelerle argümanları F # türlerine geçiremiyorum?

[<Measure>] type Blob

Ve yapıcı argümanı olarak saniye başına Blobs değer alan bir tür istiyorum:

type Something(flowRate:double<Blob/s>) = ...

F # bir titreme atar Bu konuda - "çift herhangi bir tür argüman beklemez, ama burada 1 tip argüman verilir"

Mesajı anlıyorum. Yapmaya çalıştığımın açık olduğunu düşünürdüm, ancak sözdiziminin muhtemelen doğrulanabilir olduğunu kabul ediyorum. Soru, bu ilişkiyi kodda nasıl ifade edebilirim?

cevap

8

İleti (tür) belirtildikçe, çiftler ölçü-genel değildir. Bunun yerine float<Blob/s>'u deneyin. float, double türünde bir eşanlamlı olduğundan biraz garip. Bununla birlikte, float<[<Measure>]'t> yazımının kendine özgü bir türü vardır. Benzer bir sorun, single vs. float32, int32 ve int ve int8 vs byte ile gerçekleşir. Section 9.7 of the spec bu bilgiyi kısmen kapsamaktadır.

type T = class end 
type T<[<Measure>]'t> = class end //' Duplicate definition of type T 
+0

Parlak, teşekkür: Onların tedbir Arity kullanımıyla farklılaşan kendi türlerini tanımlamak olamaz çünkü

Özellikle kafa karıştırıcı. Derleyicinin 'argüman türü bildirimlerinin üniteyi almadığını' söylemeye çalıştığını varsaymıştım, üniteler türlerden ziyade editörlerin sonuna gelmişlerdi. Bu daha basit hale getirir. –