Почему метод типа, который должен возвращать строку, возвращает вместо этого 'unit -> string' и как ее решить? - PullRequest
1 голос
/ 02 марта 2020

Итак, у меня есть этот простой код, я пытаюсь выяснить классы и наследование в F #:

type Mkp() =
    abstract tX : unit -> string
    default this.tX() = ""

type A(n : string, v : string) =
    inherit Mkp()
    member this.n = n
    member this.v = v
    override this.tX() = sprintf "%s = \"%s\" " this.n this.v

let test = A "first" "second"
let xxx = "" + test.tX

Я получаю ошибку компилятора: тип 'string' не соответствует типу 'unit' -> string 'но я ожидал, что test.tX будет строкой, что я делаю не так?

1 Ответ

6 голосов
/ 02 марта 2020

Ваши определения классов верны, но при их использовании есть две небольшие проблемы:

  • При создании экземпляра необходимо передать параметры конструктору в виде кортежа
    т.е. вам нужно сказать A("one", "two") вместо A "one" "two"

  • При вызове метода необходимо указать пустой список параметров, например test.tX()

Правильное использование вашего класса A выглядит так:

let test = A("first", "second")
let xxx = "" + test.tX()
...