Size: a a a

Scala User Group

2021 March 01

ΛВ

Λнтон Войцишевский... in Scala User Group
Sooqa
а зачем тут эта строка? type End = End.type
ну я там сделал хак небольшой, чтобы писать проще было
источник

ΛВ

Λнтон Войцишевский... in Scala User Group
потому что обжект это все равно что вал концептуально
источник

S

Sooqa in Scala User Group
Всм, почему оно не видит себя?
источник

ΛВ

Λнтон Войцишевский... in Scala User Group
и его тип надо получать через MyObj.type
источник

ΛВ

Λнтон Войцишевский... in Scala User Group
ну то есть если я возьму и объявлю вот так
val End = new InfiniteStream[End, End] {…}
источник

ΛВ

Λнтон Войцишевский... in Scala User Group
то это не будет работать, так как End — не тип
источник

ΛВ

Λнтон Войцишевский... in Scala User Group
а вот End.type — тип
источник

S

Sooqa in Scala User Group
боже
источник

ΛВ

Λнтон Войцишевский... in Scala User Group
у любого «околофинального» значения можно вызвать .type и получить его тип
источник

ΛВ

Λнтон Войцишевский... in Scala User Group
в этом нет ничего плохого, это консистентно.
val s = «aaaa»
Option[s.type] //compiles
источник

ΛВ

Λнтон Войцишевский... in Scala User Group
Sooqa
а зачем тут эта строка? type End = End.type
ее можно убрать, но везде, где End используется как тайп-параметр или вообще как тип, придется писать End.type
источник

S

Sooqa in Scala User Group
а зачем тогда нужно было выделять обжект в отдельную синтаксическую конструкцию, если это идентично определению вал переменной?
источник

ΛВ

Λнтон Войцишевский... in Scala User Group
Sooqa
а зачем тогда нужно было выделять обжект в отдельную синтаксическую конструкцию, если это идентично определению вал переменной?
обжекты можно в скале 2 (в 3 уже неважно) на топ-левеле писать
обжекты как-то могут оптимизироваться жвм
обжекты удобнее писать, чем анонимные реализации
и идентично только на уровне интуиции как работать с типами обжектов
источник

S

Sooqa in Scala User Group
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Sooqa
а зачем тогда нужно было выделять обжект в отдельную синтаксическую конструкцию, если это идентично определению вал переменной?
не идентично
источник

ΛВ

Λнтон Войцишевский... in Scala User Group
этот кусок кода кстати можно сильно лучше сделать, если избавиться от варов, добавить sealed trait, а не просто trait и использовать case class/object
источник

Oℕ

Oleg ℕizhnik in Scala User Group
каждый объект имеет свой тип, и писать
val myVal : Foo[X] with Bar[A, B] with ...
= new Foo[X](...) with Bar[A, B]  with ....

дольше и проблемнее, чем
 object myObj extends Foo[X](...) with Bar[A,B ] with ....

мало того у объектов "ленивая инициализация" построенная на механизме инициализации в jvm, т.е.
myVal будет инициализирован в момент, когда исполнение дойдёт до объявления myVal, а myObj - при первом упоминании
источник

TT

Taika Tytto in Scala User Group
Oleg ℕizhnik
каждый объект имеет свой тип, и писать
val myVal : Foo[X] with Bar[A, B] with ...
= new Foo[X](...) with Bar[A, B]  with ....

дольше и проблемнее, чем
 object myObj extends Foo[X](...) with Bar[A,B ] with ....

мало того у объектов "ленивая инициализация" построенная на механизме инициализации в jvm, т.е.
myVal будет инициализирован в момент, когда исполнение дойдёт до объявления myVal, а myObj - при первом упоминании
Первое упоминание - первый вызов?
источник

ΛВ

Λнтон Войцишевский... in Scala User Group
вызвать объект невозможно
источник

ΛВ

Λнтон Войцишевский... in Scala User Group
можно вызвать его метод apply, который «засахарится» в некий вызов объекта
источник