chciałbym zrobić coś takiego (przykład jest uproszczony, ale zawiera wszystkie istotne elementy):zręcznościowe - wystawienie Public Sub-członek prywatnej członka z niestandardowego typu
class Master
{
type DataType = Int
var counter : DataType = 0
}
class Slave(private val master : Master)
{
val counter = master.counter // (*)
}
i tutaj (*) otrzymuję błąd:
private value master escapes its defining scope as part of type Slave.this.master.DataType
val counter = master.counter
rozumiem błąd, ale ja nie rozumiem powodu - typ jest częścią klasy Master
, a nie obiektu master
, więc ważne jest, jeśli klasa jest prywatny, nie obiekt. Cóż, przynajmniej teoretycznie.
Łatwo jest dokonać szybkiego rozwiązania:
val counter : Master#DataType = master.counter
Ale wierzę, że jest to jawne wersja dokładnie tego samego kodu, jak poprzednio, to „tylko” zajmuje więcej pisać. Czy to jest zatem cecha?
PYTANIE:
Czy typ (tutaj TypDanych) zależy od obiektu, a nie klasa (czyli definicja typu za instancji klasy) w Scala?
Dziękuję, więc jeśli dobrze to rozumiem (jednak nie przeczytałem tego w "Programowaniu w Scali", wierzę - a może poślizgnęło się), można zdefiniować typ dla każdej klasy, nie tylko dla każdej klasy . – greenoldman
Dziękuję za aktualizację, jest to bardzo cenne, niestety nie mogę przegłosować twojego postu więcej niż 1 :-) – greenoldman
Jest to jedna z przydatnych rzeczy w Scali, która może być "gotcha", gdy pochodzi z innych języków OOP. Bardzo zwięzła odpowiedź; warte mojego upwote;). – TechNeilogy