Я работаю с API, который представляет такие точки, как float * float
.
Арифметику неудобно делать на:
let a = (3.0, 4.0)
let b = (2.0, 1.0)
let c = (fst a + fst b, snd a + snd b)
Я хотел бы написать:
let c = a + b
Я могу сделать это, если я определю свой собственный тип:
type Vector2 =
{
X : float;
Y : float;
}
with
static member (+) (a : Vector2, b : Vector2) =
{ X = a.X + b.X; Y = a.Y + b.Y }
Но тогда мне нужно конвертировать для API, который я использую:
let c = a + b
let cAsTuple = (c.X, c.Y)
В качестве альтернативы, я мог бы создать бесплатную функцию:
let add (ax, ay) (bx, by) =
(ax + bx, ay + by)
let c = a |> add b
Но это не так хорошо, как настоящие инфиксные операторы.
Позволяет ли F # определять пользовательские операторы для кортежей?