在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)
这是???部分,我必须弄清楚。我尝试了多种可能性,但没有一种可行。我不会列举什么是行不通的。我知道他们不工作。我希望有人能提供帮助。我见过的所有示例的两个函数都具有相同的参数列表。那真的没有帮助。
很多东西。他们都没有工作。我认为列出无效的内容没有价值。
见上文
评估为的新函数在对输入进行评估时将产生与方法相同的结果。
答案 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))
> > > }