Мне нужно составить функции с разными подписями - PullRequest
1 голос
/ 19 июня 2019

В 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 голосов
/ 21 июня 2019

Я получил это.Я надеюсь, что я расшифровал решение правильно.Пример с Try

> 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))
> > > }
...