2017-05-02 4 views

Répondre

2

Il semble que vous le lisiez à tort. Regardez le type de f2(Try[T] => Try[S]):Unit. Ensuite, en regardant f1, nous avons f: T => S.

La position _ en position de valeur est f2(g => g map f).

Voyons voir ce que nous savons à ce jour:

  1. f2(Try[T] => Try[S]):Unit
  2. f: T => S
  3. f2(g => g map f)

Donnez 1. et 3. nous pouvons en déduire que le type de g doit être Try[T]. carte sur Try[T] prend T => Something, dans le cas f qui est T => S, auquel cas Quelque chose est S.

Il peut sembler un peu difficile à lire maintenant, mais une fois que vous apprenez à faire la distinction entre le type et la position de valeur, ce type de code devient trivial.

Une autre chose à noter def f2(f: Try[T] => Try[S]): Unit = {} est assez inintéressant et peut être un peu préjudiciable à la résolution de votre question particulière.

Je voudrais essayer de résoudre ceci comme ça: d'abord, oubliez la classe que vous avez créée. Maintenant, mettre en œuvre cette (remplacer le ??? avec une mise en œuvre utile):

object P1 { 
    def fmap[A, B](A => B): Try[A] => Try[B] = ??? 
} 

Pour les points bonus utilisent le _ comme premier caractère dans votre mise en œuvre.