Skip to content

Latest commit

 

History

History
92 lines (66 loc) · 3.28 KB

singleton-objects.md

File metadata and controls

92 lines (66 loc) · 3.28 KB
layouttitlelanguagepartofnumnext-pageprevious-page
tour
Singlton objekti
ba
scala-tour
13
regular-expression-patterns
pattern-matching

Metode i vrijednosti koje ne pripadaju individualnim instancama klase pripadaju singlton objektima, označenim ključnom riječju object umjesto class.

package test object Blah { def sum(l: List[Int]): Int = l.sum } 

Metoda sum je dostupna globalno, i može se pozvati, ili importovati, kao test.Blah.sum.

Singlton objekt je ustvari kratica za definisanje jednokratne klase, koja ne može biti direktno instancirana, i ima val član object, s istim imenom. Kao i val, singlton objekti mogu biti definisani kao članovi trejta ili klase, iako je ovo netipično.

Singlton objekt može naslijediti klase i trejtove. Ustvari, case klasa bez tipskih parametara će podrazumijevano kreirati singlton objekt s istim imenom, i implementiranim Function* trejtom.

Kompanjoni (prijatelji)

Većina singlton objekata nisu samostalni, već su povezani s istoimenom klasom. “Singlton objekt istog imena” case klase, pomenut ranije, je jedan primjer ovoga. U ovom slučaju, singlton objekt se zove kompanjon objekt klase, a klasa se zove kompanjon klasa objekta.

Scaladoc ima posebnu podršku za prebacivanje između klase i njenog kompanjona: ako krug s velikim “C” ili “O” ima savijenu ivicu (kao papir), možete kliknuti na krug da pređete na kompanjon.

Klasa i njen kompanjon objekt, ako ga ima, moraju biti definisani u istom izvornom fajlu:

classIntPair(valx:Int, valy:Int) objectIntPair { importmath.Orderingimplicitdefipord:Ordering[IntPair] =Ordering.by(ip => (ip.x, ip.y)) }

Često vidimo typeclass (jedan od dizajn paterna) instance kao implicitne vrijednosti, kao navedeni ipord, definisane u kompanjonu. Ovo je pogodno jer se i članovi kompanjona uključuju u implicitnu pretragu za potrebnim vrijednostima.

Napomene Java programerima

static nije ključna riječ u Scali. Umjesto nje, svi članovi koji bi u Javi bili statički, uključujući i klase, trebaju ići u neki singlton objekt. Pristupa im se istom sintaksom, importovanim posebno ili grupno.

Java programeri nekada definišu statičke članove privatnim kao pomoćne vrijednosti/funkcije. Iz ovoga proizilazi čest šablon kojim se importuju svi članovi kompanjon objekta u klasu:

class X { import X._ def blah = foo } object X { private def foo = 42 } 

U kontekstu ključne riječi private, klasa i njen kompanjon su prijatelji. object X može pristupiti privatnim članovima od class X, i obrnuto. Da bi član bio zaista privatan, koristite private[this].

Za pogodno korištenje u Javi, metode, uključujući var i val vrijednosti, definisane direktno u singlton objektu također imaju statičke metode u kompanjon klasi, zvane statički prosljeđivači. Drugi članovi su dostupni kroz X$.MODULE$ statička polja za object X.

Ako prebacite sve u kompanjon objekt i klasa ostane prazna koju ne želite instancirati, samo obrišite klasu. Statički prosljeđivači će biti kreirani svakako.

close