누군가이 F # 호기심을 설명 할 수 있습니까?인터페이스의 튜플 된 인수
type IFoo =
abstract member Bar1: int * int -> int * int
abstract member Bar2: int * int -> (int * int)
abstract member Bar3: (int * int) -> int * int
type Foo() = class end
with
interface IFoo with
member this.Bar1 (x, y) = (x, y)
member this.Bar2 (x, y) = (x, y) // Same impl as Bar1 i.e. parentheses on RHS of -> in interface member definition are ignored
// member this.Bar3 (x, y) = (x, y) // Compile error: "This override takes a different number of arguments to the corresponding abstract member"
member this.Bar3 tuple = tuple // So, parentheses on LHS of -> in interface member definition *does* make a difference!
IFoo.Bar1
및 IFoo.Bar3
의 정의와 의미의 차이점은 무엇입니까?
흥미로운 - CLI 세부 정보가 F # 구문으로 새어 나옵니다. 나는 이것이 interop 이유로 필요하다고 생각합니까? 순수 F # 코드의 경우 두 경우를 구별 할 이유가 없습니다. – Akash
@Akash CLI 메서드의 세계가 왜 다중 패러다임 언어로 F #의 일부가 되었든 상관없이, 그 이유는 무엇이든간에. 오버로드, 상속 및 오버라이드, 선택적 인수 등이 있으며 이러한 기능은 null이 아닌 방식으로 interop에 독점적으로 간주되지 않습니다. 그러나 기능적 우선 프로그래밍과 항상 잘 결합되는 것은 아닙니다. 순수 기능 코드에서는 이러한 기능이 사용되지 않으므로 기능 부품은 CLI 방법과 잘 매핑됩니다. 단, 질문에 표시된 희소 한 어색함을 제외하고는. – Vandroiy