minor major f# c#-to-f#

f# - major - ¿No hay nombres de argumento en declaración abstracta?



f# minor scale (2)

Esta es la declaración típica de un miembro abstracto en F #:

abstract member createEmployee : string -> string -> Employee

Usted define los tipos de argumento pero no sus nombres. Sin nombres, ¿cómo dice qué es cada parámetro cuando implementa la interfaz? En otras palabras, ¿cómo sabe si la interfaz espera implementarse como 1- o 2-?

1- member this.createEmployee firstName lastName = ... 2- member this.createEmployee lastName firstName = ...

¿Estoy viendo el problema desde una perspectiva equivocada (estoy acostumbrado a C #)?


La sintaxis de esto es super fiddly IMO. Quería hacer esto con los parámetros como una tupla (como un método de C #) y solo a través de prueba y error encontré que esto funciona:

abstract member PutChar : x:int * y:int * c:char * flag:Background -> unit

Y esta variante más fea también funciona:

abstract member PutChar : x : int * y : int * c : char * flag : Background -> unit

A continuación hay cosas que todos consideramos razonables pero que fallaron con el mismo error: Unexpected symbol '':'' in member definition. :

// ALL BAD vvv abstract member PutChar : (x:int * y:int * c:char * flag:Background) -> unit abstract member PutChar : (x:int, y:int, c:char, flag:Background) -> unit abstract member PutChar : (x:int) * (y:int) * (c:char) * (flag:Background) -> unit // ALL BAD ^^^


Qué pasa:

abstract member createEmployee : firstName:string -> lastName:string -> Employee

?