Нет имен аргументов в абстрактном объявлении? - PullRequest
25 голосов
/ 20 сентября 2011

Это типичное объявление абстрактного члена в F #:

abstract member createEmployee : string -> string -> Employee

Вы определяете типы аргументов, но не их имена. Без имен, как вы скажете, что каждый параметр, когда вы реализуете интерфейс? Другими словами, как вы узнаете, будет ли интерфейс реализован как 1 или 2 -?

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

Я смотрю на проблему с неправильной точки зрения (используется для C #)?

Ответы [ 2 ]

38 голосов
/ 20 сентября 2011

А как же:

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

6 голосов
/ 06 марта 2016

Синтаксис этого супер супер IMO.Я хотел сделать это с параметрами как кортеж (как метод C #), и только методом проб и ошибок я нашел это для работы:

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

И этот более уродливый вариант также работает:

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

Ниже приведены вещи, которые казались разумными, но потерпели неудачу с той же ошибкой - 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 ^^^
...