Domanda

Gli impliciti di Scala sono molto potenti.Sono curioso di sapere se sono una caratteristica nuova/unica di Scala o se il concetto esiste già in altri linguaggi di programmazione.

Grazie.

MODIFICARE:

Per chiarire la mia domanda, sì, sto parlando di questa attuazione concreta.Avere "cose ​​implicite" ovunque sembrava strano all'inizio, ma dopo averlo usato per un po' e vedendo come lo usano gli altri, sono impressionato da quanto bene funzioni.

È stato utile?

Soluzione

Sembra che l'ispirazione siano state le lezioni di tipo di Haskell.Almeno un articolo del blog lo afferma gli impliciti hanno la loro origine nelle classi di tipo Haskell;l'articolo si riferisce a un articolo del 2006 di Martin Odersky intitolato, Classi di tipo povero.E Daniel Sobral ha scritto un recente articolo su come farlo simulare classi di tipi con impliciti.

Altri suggerimenti

Nel 2000 al Princples of Programming Lanages (POPL) è uscito un ottimo articolo che introduceva parametri impliciti.Sono stati implementati in Haskell.Sono sicuro che Martin Odersky, il progettista di Scala, fosse a conoscenza di questo lavoro.(Martin è un partecipante frequente e gradito e un collaboratore di POPL.)

Altro riferimento: "Classi di tipo come oggetti e impliciti" (2010), di Bruno C.D.S.Oliveira, Adriaan Moors e Martin Odersky.

Tramite questo twittare E ri-twittare.

Dipende da quanto si desidera estendere la frase "supporta impliciti".Uno dei motivi più convincenti per utilizzare gli impliciti in Scala è essenzialmente quello di aggiungere metodi a una classe esistente (a cui non si ha accesso).Ciò è possibile in altri linguaggi attraverso diversi costrutti:ad esempio, Smalltalk, Ruby e Objective-C supportano tutti l'aggiunta di metodi a classi che non controlli.

Se ho capito bene gli impliciti da http://patricklogan.blogspot.com/2007/06/scala-implicits.html allora sì, ci sono diverse lingue che lo supportano.

Il miglior esempio sono i metodi di estensione C#.Un esempio recente in cui li ho usati:

Spesso dovevo fare calcoli sulla distanza tra due PointS.UN Point non ha un metodo per calcolare la distanza da un altro punto, quindi ho aggiunto il seguente codice al mio progetto:

class MyPointExtension
{
  public static Double GetDistance(this Point p1, Point p2)
  {
    return /* the pythagoras code */
  }
}

Potrei quindi fare:

Point unitPosition = new Point(x,y);
Point target = new Point(x2,y2);
Double distance = unitPosition.GetDistance(target);

Sebbene non fosse potente come quello implicito in Scala, il C++ disponeva già di operatori di conversione e costruttori di copia che potevano entrambi portare a conversioni di tipo implicite.In combinazione con la capacità di definire operatori binari (qualcosa che Scala non consente) ciò ha fornito parte della potenza implicita di Scala.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top