【问题标题】:Composing curried functions组合柯里化函数
【发布时间】:2018-06-11 07:47:03
【问题描述】:

我处于以下情况。我希望一个函数只能在给定的上下文中运行。同时,我希望能够使用andThen 语法来组合这些函数(在这种情况下看起来会更好)。

所以这里是一个工作表的小例子。我希望能够以第二种方式做到这一点。

implicit val iInt: Int = 2

def a(a: String)(implicit ctx: Int): String = a
def b(b: String)(implicit ctx: Int): String = b

val works = b(a("foo"))
val fails = a("foo") andThen b

一般问题可能是。如何编写柯里化函数?但如果有人能满足第一段中描述的要求,我也会感兴趣。

【问题讨论】:

  • 似乎与 PartialFunctions 的相关性比柯里化更多。否则你的签名不会看起来像def a(a: String)(b: String),然后你会在同一个函数中使用这两个变量。

标签: scala currying


【解决方案1】:

这一行可以根据您对 a 和 b 的定义进行:

val worksToo = (a _ andThen b) ("foo") 

a 和 b 被转换为函数(因为没有),然后链接。

【讨论】:

  • 是的。我自己刚拿到的。有没有机会删除下划线?也许通过使用一些隐式转换。顺便提一句。第二个下划线是多余的。
  • 是的,你是对的,我编辑代码以删除第二个'_'
  • 我认为考虑到有关函数的一些约束信息并使用隐式转换来编写 dsl,这可以做得更好。但我现在接受这个,稍后会回来
  • @Lukasz:如果你想去掉下划线,最简单的方法是使用函数。你在你的问题中谈论函数,但你从不使用函数,你只使用方法。下划线是将方法转换为函数。首先使用函数会容易得多。
猜你喜欢
  • 2016-01-01
  • 2021-02-07
  • 2012-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-13
  • 2013-11-16
  • 2013-10-04
相关资源
最近更新 更多