【问题标题】:Why a type method that should return a string returns a 'unit -> string' instead and how to solve it?为什么应该返回字符串的类型方法返回'unit -> string'以及如何解决它?
【发布时间】:2020-06-14 06:02:09
【问题描述】:

所以我有这个简单的代码,我试图找出 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 是一个字符串,我做错了什么?

【问题讨论】:

    标签: string class methods f#


    【解决方案1】:

    你的类定义是正确的,但是使用时有两个小问题:

    • 创建实例时,需要将参数作为元组传递给构造函数
      即你需要说A("one", "two")而不是A "one" "two"

    • 调用方法时,需要指定空参数列表,即test.tX()

    你的类A的正确用法是这样的:

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

    【讨论】:

      猜你喜欢
      • 2015-09-04
      • 1970-01-01
      • 2013-08-12
      • 1970-01-01
      • 1970-01-01
      • 2020-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多