4 votes

Quel est le type de fonction ?

L'opérateur pratique $ de Haskell m'a manqué, j'ai donc décidé d'en introduire un.

class Applayable[-R,T] (val host : Function[R,T]) {
  def $: R=>T = host.apply
}
implicit def mkApplayable[R,T] (k : Function[R,T]) : Applayable[R,T] = new Applayable(k)

Cela a parfaitement fonctionné pour

val inc : Int => Int = _ + 1
inc $ 1

mais a échoué pour

def inc(x:Int) : Int = x+1
inc $ 1

Quel type dois-je préciser pour le cast implicite pour convertir def à une instance d'Applayable ?

7voto

Jean-Philippe Pellet Points 25240

Vous ne pouvez pas spécifier un type pour faire ce que vous voulez : les méthodes ne sont pas des fonctions. Vous pouvez transformer une méthode en une fonction (éventuellement partiellement appliquée) en ajoutant le trait de soulignement magique après celle-ci, comme ceci :

def inc(x:Int) : Int = x+1
(inc _) $ 1

3voto

Channing Walton Points 1444

Vous devez traiter la méthode inc comme une fonction en ajoutant '_'. Cela fonctionne :

inc _ $ 1

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X