정적이 아닌 public 멤버 활성 패턴이 허용되는지는 잘 모르겠지만 컴파일러가 불평하지 않고 정의 할 수 있습니다. 허용되는 경우 일치하는 구문은 무엇입니까? 컴파일러에서 Foo에 대한 형식 불일치를 FooBar2.doSomething에 제공하고 있습니다. 'a -> Choice<'b,'c>
F # 비 정적 멤버로 활성 패턴
// No error in this class, static works great
type FooBar() =
static member (|Foo|Bar|) (x, y) =
match x = y with
| true -> Foo
| false -> Bar
member x.doSomething y =
match x, y with
| Foo ->()
| Bar ->()
type FooBar2() =
member x.(|Foo|Bar|) y =
match x = y with
| true -> Foo
| false -> Bar
// compiler error on "Foo"
member x.doSomething y =
match y with
| Foo ->()
| Bar ->()
흠, 적어도 정적 버전을 가지고 있지 않으면 나를 네임 스페이스가 아닌 모듈을 사용해야하는 것으로 압박하고 있습니다. 이것에 대한 나의 유일한 관심은 둘 사이에 똑같은 이름/행동을 나누는 것입니다. 이로 인해 반복되는 이름이 생길 수 있습니다. 차라리 모든 네트워크 코드를 네임 스페이스 네트워크에 보관하고 CLR이 모든 정적 클래스로 변환한다고 생각하는 모듈 네트워크도 보유하지 않을 것입니다. 그래서 나는 MyApp.Network.ModuleName.Identifier와 같은 것으로 끝날 것입니다. – gradbot