【问题标题】:Derive functions with interface - F#使用接口导出函数 - F#
【发布时间】:2021-04-29 08:44:39
【问题描述】:

我是 F# 新手,我正在尝试使用这些接口实现一个小计算器... 但我一到 f_add 就在派生部分苦苦挣扎。
如果有人可以帮助我,那就太好了。 :)

type IFunction =
    interface
        abstract member ToString: Unit -> String
        abstract member Apply: Nat -> Nat
        abstract member Derive: Unit -> IFunction
    end

【问题讨论】:

  • 我试图解决您的特定问题,但我也建议在 F# 论坛或 fsharporg slack 上寻求一些代码审查帮助 - 这里有很多可以也可以用更“典型的 F#”风格编写,随着您继续学习,这可能值得探索。

标签: interface f# calculator


【解决方案1】:

由于f_add 以柯里化形式定义(F# 函数的典型形式),而不是元组,因此您需要使用空格而不是元组来传递参数:

//                                     HERE .  Using comma makes that a tuple
// member self.Derive () = f_add(f.Derive (), g.Derive ()) //wrong

改为作为 F# 样式函数传递:

member self.Derive () = f_add (f.Derive ()) (g.Derive ()) 

同样的问题存在于其他实现中。

【讨论】:

  • 我知道它很容易修复,但只是看不到它 :D 非常感谢您的帮助,现在一切正常 :)
  • 很高兴你解决了这个问题,@Guna 但以后请考虑发布实际的错误消息,而不是 //wrong。错误代码和消息通常有助于更好地了解问题所在,并允许搜索引擎在未来找到这些问题。
猜你喜欢
  • 1970-01-01
  • 2019-07-14
  • 1970-01-01
  • 2011-01-17
  • 2013-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-26
相关资源
最近更新 更多