Pergunta

Imagine a seguinte interface em C#:

interface IFoo {
    void Bar();
}

Como posso implementar isso em f#? Todos os exemplos que encontrei durante 30 minutos de pesquisa on -line mostram apenas exemplos que têm tipos de retorno que eu suponho é mais comum em um estilo funcional, mas algo que não posso evitar nesse caso.

Aqui está o que tenho até agora:

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

Falha com _fs0010:

Palavra -chave inesperada 'void' na expressão_.

Foi útil?

Solução

O equivalente é unidade que é definida sintaticamente como ().

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

Outras dicas

Para informações gerais sobre os tipos F#, consulte

A sintaxe básica de F# - tipos

Daquela página:

o unidade O tipo tem apenas um valor, escrito "()". É um pouco como "Void", no sentido de que, se você tiver uma função que pede apenas efeitos colaterais (por exemplo, printf), essa função terá um tipo de retorno de "unidade". Toda função assume um argumento e retorna um resultado, então você usa a "unidade" para significar que o argumento/resultado é desinteressante/sem sentido.

O tipo de retorno precisa ser (), então algo como membro this.bar = () deve fazer o truque

O equivalente em F# é:

type IFoo =
    abstract member Bar: unit -> unit
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top