blob: 300ab45477ab7a230dc0435d15c321eb1616e59e (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
module SomeNamespace.SomeModule
// This example is a basic class with (1) local let bindings, (2) properties, (3) methods, and (4) static members.
type Vector(x : float, y : float) =
let mag = sqrt(x * x + y * y) // (1)
member this.X = x // (2)
member this.Y = y
member this.Mag = mag
member this.Scale(s) = // (3)
Vector(x * s, y * s)
static member (+) (a : Vector, b : Vector) = // (4)
Vector(a.X + b.X, a.Y + b.Y)
// Declare IVector interface and implement it in Vector'.
type IVector =
abstract Scale : float -> IVector
type Vector'''(x, y) =
interface IVector with
member __.Scale(s) =
Vector'''(x * s, y * s) :> IVector
member __.X = x
member __.Y = y
type Vector2(x, y) =
interface IVector with
member __.Scale(s) =
Vector2(x * s, y * s) :> IVector
member __.X = x
member __.Y = y
|