Convenzione di denominazione della classe Case [chiusa]

2

Nelle mie recenti avventure in Scala , ho trovato case classes una valida alternativa alle enumerazioni quando ho bisogno di includere un po 'di logica o più valori con loro. Spesso mi trovo a scrivere strutture che assomigliano a questo, tuttavia:

object Foo{
  case class Foo(name: String, value: Int, other: Double)

  val BAR = Foo("bar", 1, 1.0)
  val BAZ = Foo("baz", 2, 1.5)
  val QUUX = Foo("quux", 3, 1.75)
}

Sono principalmente preoccupato per la denominazione dell'oggetto e la classe del caso. Dal momento che sono la stessa cosa, finisco con Foo.Foo per arrivare alla classe interna. Sarebbe saggio nominare la classe del caso qualcosa sulla falsariga di FooCase ? Non sono sicuro che la potenziale ambiguità potrebbe compromettere il sistema dei tipi se devo fare qualcosa con sottotipi o ereditarietà.

    
posta KChaloux 29.08.2012 - 21:39
fonte

2 risposte

2

La classe nidificata Foo.Foo non è della stessa classe di Foo e non c'è ambiguità. La classe caso Foo (quella interna) è accessibile solo dal suo nome completo (Foo.Foo). Ma:

Se "importi Foo._" o "Foo.Foo" ti troverai nei guai. Una soluzione è usare

import Foo.{Foo => InnerFoo}

Oppure non importa nulla e usa il Path completo (Foo e Foo.Foo). Questo ti risponde?

    
risposta data 29.08.2012 - 22:01
fonte
3

In Scala esistono oggetti del pacchetto . Pertanto, non è necessario cercare un nuovo nome:

package foo {
  case class Foo(name: String, value: Int, other: Double)
}
package object foo {
  val Bar = Foo("bar", 1, 1.0)
  val Baz = Foo("baz", 2, 1.5)
  val Quuz = Foo("quux", 3, 1.75)
}

Più tardi puoi importarli con:

import foo._
// use all members of package 'foo' and package object 'foo'

Btw, le costanti sono generalmente chiamate UpperCamelCase (come mostrato nel mio esempio).

    
risposta data 29.08.2012 - 22:02
fonte

Leggi altre domande sui tag