2011-11-24 28 views
1

我已經定義了以下記錄INT:錯誤復接浮動,與F#

type Ball = 
    { 
     center : Vector3<m> 
     radius : float32<m> 
     color : Microsoft.Xna.Framework.Color 
    } 

我試圖創造球的名單是這樣的:

let BallRadius = 0.2<m> 
let list = 
    [ for i in 0 .. 9 -> 
     { 
      center = { X = BallRadius + (float i) * BallRadius * 2.0 ; Y = 0.0<m>; Z = 0.0<m>}; //1 error 
      radius = BallRadius; //1 error 
      color = Microsoft.Xna.Framework.Color.White 
     } 

    ] 

看來,在第一種情況下我是一個整數,我不能乘以浮點數。在第二種情況下,我不能將float分配給float32。 我該如何解決這個問題?

回答

4
  1. 你不能多花車由整型,所以你需要center = BallRadius + (float i) * BallRadius * 2.0
  2. radius = (float32 BallRadius) * 1.0f<m>作品,雖然我不知道這是最地道的。

這且不說,它是如何將兩個BallRadius不是很清楚,我給你一條Vector3<m>,除非你的載體只是一個浮動...

+0

右thanks..adding 2 ballradius這是一個錯誤..對不起 – Heisenbug

+0

你的解決方案的工作,但它很無聊玩的所有此轉換適用於所有分配,不是嗎?另一方面,使用度量是非常有用的,是否沒有任何干淨的解決方案來做這種分配而不總是執行某種類型的轉換? – Heisenbug

+0

那麼,使用相同的類型可能會有所幫助,但我不確定該選項對您是否可用。你能改變Ball中半徑的定義嗎? – Benjol

0
[<Measure>] type m 

type Vector3<[<Measure>] 'a> = 
    { 
    X : float32<'a> 
    Y : float32<'a> 
    Z : float32<'a> 
    } 

type Ball = 
    { 
    center : Vector3<m>; 
    radius : float32<m>; 
    } 

let BallRadius = 0.2f<m> 
let list = [ for i in 0..9 -> { center = { X = BallRadius + (float32 i) * BallRadius * 2.0f; Y = 0.0f<m>; Z = 0.0f<m>}; radius = BallRadius;} ] 

下面是我的作品。