Gibt es eine Namenskonvention für implizite Klassen?

8

Zum Beispiel in Objective-C, wo Klassenerweiterungen ein direktes Sprachkonstrukt sind, machen wir:

im Feld namens NSArray + FKBinarySearch.h :

%Vor%

Benennen Sie Ihre Erweiterungsklassen wie folgt:

%Vor%

Scalaz-Aufrufe machen zum Beispiel Erweiterungsklassen mit dem Suffix Ops : BooleanOps oder sogar ihre eigenen Eigenschaften erweitern FoldableOps

Aber Ops fühlt sich zu allgemein an, OTOH gibt es Pakete. Auch Ops in scalaz Fall enthält alles.

    
phadej 21.01.2015, 07:24
quelle

3 Antworten

2

Nein, es gibt keine wirklich etablierte Konvention. @ srgfed01 listet einige Ansätze auf (andere Konventionen, die ich gesehen habe: implizite Konvertierungen für X in einem Objekt mit dem Namen ImplicitX anstatt Implicits und PimpedX für die implizite Klasse, die X umschließt), Aber Sie werden all diese und mehr in vorhandenen Scala-Bibliotheken sehen - manchmal mehrere verschiedene Konventionen in derselben Bibliothek. Nichts ist so gut etabliert wie der x2y Stil für implizite Konvertierungen , vielleicht weil implizite Klassen ein relativ neues Feature sind.

Wählen Sie also einen Stil aus, den Sie mögen, und seien Sie darauf vorbereitet, in den von Ihnen verwendeten Bibliotheken nach vielen Konventionen zu suchen.

    
lmm 21.01.2015, 11:19
quelle
9

In Programmierung in Scala in "Kapitel 21 · Implizite Konvertierungen und Parameter" - & gt; "Benennung einer impliziten Konvertierung." es wird gesagt:

  

Implizite Konvertierungen können beliebige Namen haben. Der Name eines Impliziten   Umrechnung spielt nur in zwei Situationen eine Rolle: wenn Sie es schreiben wollen   explizit in einer Methodenanwendung und um zu bestimmen, welche implizit   Konvertierungen sind an jeder Stelle im Programm verfügbar.

In Scala programmieren "Kapitel 5: Implicits" - & gt; "Wise Use of Implicits" heißt es:

  

Eine Möglichkeit, die Sichtbarkeit zu verbessern, besteht darin, die Praxis von   Setzen von impliziten Werten in ein spezielles Paket namens implicits oder an   Objekt namens Implicits.

Die implizite Klasse ist wie die implizite Methode, aber im Falle der Klasse ist ihr primärer Konstruktor beteiligt. Und wenn Sie Scala implizite Konvertierungsmethoden betrachten, können Sie etwas finden wie:

  
  • wrapString (s: String): WrappedString
  •   
  • genericArrayOps [T] (xs: Array [T]): ArrayOps [T]
  •   

Meiner Meinung nach kann innerhalb Implicits object für Ihren impliziten Klassennamen folgendes verwendet werden:

  
  • xOps
  •   
  • RichX
  •   
  • WrappedX
  •   
  • AsX
  •   

Sie können einen beliebigen auswählen, der Ihren Projektbedingungen entspricht.

    
user5102379 21.01.2015 08:12
quelle
1

Die Standardbibliothek hat StringOps .

Jemand auf der Mailing-Liste hat mich zu "absurd deskriptiven Backquoted Identifiern" gedrängt, die vermeiden, Kollisionen zwischen Implicits zu benennen.

OTOH, vielleicht möchten Sie es einem Kunden leicht machen, das implizite durch Abschatten auszuschalten.

    
som-snytt 21.01.2015 07:43
quelle

Tags und Links