Как реализовать элемент интерфейса, который возвращает void в F # - PullRequest
20 голосов
/ 18 июня 2010

Представьте себе следующий интерфейс в C #:

interface IFoo {
    void Bar();
}

Как я могу реализовать это в F #? Все примеры, которые я нашел за 30 минут поиска в Интернете, показывают только примеры, у которых есть типы возвращаемых данных, которые, я полагаю, более распространены в функциональном стиле, но чего-то, чего я не могу избежать в этом случае.

Вот что у меня есть:

type Bar() =
    interface IFoo with
        member this.Bar() =
            void

Сбой с _FS0010:

Неожиданное ключевое слово 'void' в выражении _.

Ответы [ 4 ]

22 голосов
/ 18 июня 2010

Эквивалентом является единица, которая синтаксически определяется как ().

type Bar() =
    interface IFoo with
        member this.Bar () = ()
7 голосов
/ 18 июня 2010

Для получения общей информации о типах F # см.

Основной синтаксис типов F #

С этой страницы:

unit type имеет только одно значение, написанное "()".Это немного похоже на «void», в том смысле, что если у вас есть функция, которую вы вызываете только для побочных эффектов (например, printf), такая функция будет иметь возвращаемый тип «unit».Каждая функция принимает аргумент и возвращает результат, поэтому вы используете «единицу», чтобы показать, что аргумент / результат неинтересен / бессмыслен.

6 голосов
/ 18 июня 2010

Тип возвращаемого значения должен быть (), поэтому что-то вроде member this.Bar = () должно сработать

3 голосов
/ 12 апреля 2016

Эквивалент в F #:

type IFoo =
    abstract member Bar: unit -> unit
...