Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

F# : static let and static member

Tags:

static

f#

I'm a noob in F# and currently reading Expert in F# 3.0. Its the first compiled language I'm learning (I just know to program in R)

on chapter 6, p.117, we are introduced without much ceremony static let and static member. i don't really understand what it is

type Vector2D(dx : float, dy : float) =
     static let zero = Vector2D(0.0, 0.0)
     static let onex = Vector2D(1.0, 0.0)
     static let oney = Vector2D(0.0, 1.0)
     /// Get the zero vector
     static member Zero = zero
     /// Get a constant vector along the X axis of length one
     static member OneX = onex
     /// Get a constant vector along the Y axis of length one
     static member OneY = oney 

There is no example who to proceed further in the book.

I'm typing this in F# interactive. From there, how do I construct a variable x whose value is zero (or onex...)?

I'm trying the following. Nothing works

let x = Zero;;
let y = Vector2D(2.0,2.0);; /// ok
y.Zero;;
stdin(237,1): error FS0809: Property 'Zero' is static

in http://fsharpforfunandprofit.com/posts/classes/ there is this example,

type StaticExample() = 
    member this.InstanceValue = 1
    static member StaticValue = 2  // no "this"

// test
let instance = new StaticExample()
printf "%i" instance.InstanceValue
printf "%i" StaticExample.StaticValue

so i would have expected y.Zero;; to yield something above ?...

thanks. sorry the question is so basic. If someone can explain me what it is about...

like image 593
Fagui Curtain Avatar asked Dec 24 '15 05:12

Fagui Curtain


1 Answers

So the basic difference is that static members don't belong to an instance of a class.

rather than y.Zero, you get Vector2D.Zero.

To a first approximation you can think of these examples of properties of the type.

like image 156
John Palmer Avatar answered Sep 28 '22 07:09

John Palmer