Ошибка умножения float и int на F # - PullRequest
1 голос
/ 24 ноября 2011

Я определил следующую запись:

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

Я пытаюсь создать список Ball следующим образом:

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
        }

    ]

Кажется, что в первом случае я - int, и я не могу умножить, если для float. Во втором случае я не могу назначить float для float32. Как я могу решить это?

Ответы [ 2 ]

4 голосов
/ 24 ноября 2011
  1. Вы не можете использовать несколько операций с плавающей запятой в целых числах, поэтому вам понадобятся center = BallRadius + (float i) * BallRadius * 2.0
  2. radius = (float32 BallRadius) * 1.0f<m> работы, хотя я не уверен, что это самая идиоматичная.

Кроме того, мне не ясно, как сложение двух BallRadius дает вам Vector3<m>, если ваш вектор не является просто плавающей точкой ...

0 голосов
/ 24 ноября 2011
[<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;} ]

Вот что у меня работает.

...