F#の名前は、型と値へのバインディングとして機能し、いつでも名前が「ポイントしている」ものを再定義することができます。例えば。
// lets define type A
type A(name) = member this.Name : string = name
let x = A("test")
// lets "bind" the type name 'A' to a new type
type A(number) = member this.Number : int = number
let y = A(10)
printfn "type name of x: %s" (x.GetType().Name) // prints 'type name of x: A'
printfn "type name of y: %s" (y.GetType().Name) // prints 'type name of y: A'
のでx
とy
A
名前付きの型の両方のですが、同じではありません。同じロジックがPerson
とAnimal.Person
に適用され、定義した順序によっては、最後に定義されたものはPerson
と入力したときに参照されるものになります。
前述のとおり、新規または定義済みの注文を使用して両方にアクセスできます。 Person
クラスをAnimal
とは別のモジュールに配置することもできます。
module Inner =
type Person(name) ...
このようにして、モジュール名の前にタイプすることでアクセスできます。
私はそれを答えのように追加しませんが、なぜならそれを 'new'を追加すると' let person:Person = new Person(name = "John") 'のように動作します。 – MarcinJuraszek
@MarcinJuraszek私は 'new'キーワードを使いたくないのですが、 'new'を使うと、IDEは私に「new」が冗長であると言います。 –
興味深い。私はF#Interactiveでテストしました。 – MarcinJuraszek