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
을 입력 할 때 참조 된 정의가 마지막으로 정의됩니다.
위에서 언급 한 것처럼 새 명령이나 정의 명령을 사용하여 둘 모두에 액세스 할 수 있습니다. Animal
이 아닌 다른 모듈에 Person
클래스를 추가 할 수도 있습니다.
module Inner =
type Person(name) ...
이렇게하면 모듈 이름 앞에 추가하여 유형에 액세스 할 수 있습니다.
왜 이런지 모르겠지만 대답으로 추가하지는 않겠지 만,'new'를 추가하면'let person : Person = new Person (name = "John")'이 작동합니다. – MarcinJuraszek
@MarcinJuraszek 'new'키워드를 사용하고 싶지 않고 'new'를 사용하면 IDE에 'new'가 중복되어 있다고 나와 있습니다. –
흥미 롭습니다. F # Interactive에서만 테스트했습니다. – MarcinJuraszek