Como implementar um membro da interface que retorna vazio em f#
-
28-09-2019 - |
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_.
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