F # вызывает функцию-член из другой функции типа при реализации интерфейса - PullRequest
0 голосов
/ 25 апреля 2019

Это рабочий пример из здесь :

type MethodExample() = 

    // standalone method
    member this.AddOne x = 
        x + 1

    // calls another method
    member this.AddTwo x = 
        this.AddOne x |> this.AddOne

Вот что я хочу сделать:

type IMethod =   
    abstract member  AddOne: a:int -> int
    abstract member  AddTwo: a:int -> int

type MethodExample() =     
    interface IMethod with

        member this.AddOne x = 
            x + 1

        // calls another method
        member this.AddTwo x = 
            this.AddOne x |> this.AddOne

Функция AddOne недоступно, я также пытался снизить это до MethodExample, но это ужасно и не работает.

Как я могу это сделать?

1 Ответ

2 голосов
/ 25 апреля 2019

В F # все реализации интерфейса являются закрытыми - методы интерфейса не отображаются как открытые методы класса, как в C #.Они доступны только через интерфейс.

Поэтому, чтобы получить к ним доступ, сначала нужно привести класс к интерфейсу:

member this.AddTwo x = 
    let me = this :> IMethod
    me.AddOne x |> me.AddOne
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...