I am using the F# CTP 22.214.171.124 and running the samples based on Tomas Petricek's article, on page 12
type MyCell(n:int) = let mutable data = n + 1 do printf "Creating MyCell(%d)" n member x.Data with get() = data and set(v) = data <- v member x.Print() = printf "Data %d" n override x.ToString() = sprintf "(Data %d)" data static member FromInt(n) = MyCell(n)
Four questions comes into mind as I typed this into the F# Interactive:
- Why do I get an error message as shown below in Figure 1.
- Why is there an
x.ToString()but not in
- Where did the
xcome from? and why is it there when the type
MyCellis being defined so how can you reference an 'object' in that way, such as for
> type MyCell(n:int) = - let mutable data = n + 1 type MyCell(n:int) = -----^^^^^^^ stdin(6,6): error FS0547: A type definition requires one or more members or othe r declarations. If you intend to define an empty class, struct or interface, the n use 'type ... = class end', 'interface end' or 'struct end'. -
ToStringare methods, but
Datais a property, so for
=comes before the definitions of the
thisto refer to the class whose members are being defined, F# lets you choose an identifier on a member-by-member basis.
xis used in many examples, but the choice is arbitrary.