我需要用不同的签名组成函数

时间:2019-06-19 20:42:49

标签: scala function composition

在scala中,我有两个具有不同签名的函数。我想编写一个将两个功能组合成具有共同签名的新功能的功能。

type CFunc = (Context)=>Context
type UCFunc = (Context,CFunc)=>Context
type CompF = (Context,UCFunc,CFunc)=>CFunc

val combine: CompF = (c:Context,uc:UCFunc, f:CFunc ) => ???

如果我执行代码,我会

val doIt: UCFunc = (c:Context,f:CFunc) => f(c)

def clumsy(c:Context,f:CFunc):Context = doIt(c,f)

这是???部分,我必须弄清楚。我尝试了多种可能性,但没有一种可行。我不会列举什么是行不通的。我知道他们不工作。我希望有人能提供帮助。我见过的所有示例的两个函数都具有相同的参数列表。那真的没有帮助。

很多东西。他们都没有工作。我认为列出无效的内容没有价值。

见上文

评估为的新函数在对输入进行评估时将产生与方法相同的结果。

1 个答案:

答案 0 :(得分:0)

我明白了。我希望我正确地抄写了解决方案。 试试看

> Context holds the context of the functions. 
> > I - input to function  (read by f)
> > R - result of function (updated by f)
> > E - exception causing an error (updated by TryF)
> > > Update - copies the old context, notes the exception 
> 
> > val tryF = (f:Context=>Context) => 
> > > Try(f(c)) match {
> > > > case Success(ok) => ok
> > > > case Failure(e)  => c.update(Option(e))
> > > > case _           => c.update(Option(new MatchError(f))
> > > }