- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
object Point2D {
type Point2D = Object {def apply(method: Method): method.type#signature}
trait Method {
type signature
}
object ToString extends Method {
override type signature = () => String
}
object GetX extends Method {
override type signature = () => Int
}
object SetX extends Method {
override type signature = (Int) => Point2D
}
def Point2D(x: Int, y: Int): Point2D = {
class Dispatch {
def apply(method: Method): method.signature = (method match {
case ToString => () => s"($x, $y)"
case GetX => () => x
case SetX => (x: Int) => Point2D(x, y)
}).asInstanceOf[method.signature]
}
new Dispatch
}
}
Не знаю зачем это было писать (т.как в этом контексте никакого практического применения этому нет). Но, возможно, это пример того как можно через жопу задать тип наперед, исходя из того, какие именно поля будут в классе.
Чувак спрашивал как это написать на крестах. Этот факт многое объясняет.
А ещё сказал что это популярный паттерн dependend method types.
Классы скалы не умеют в статические методы, поэтому вставили костыль: приходится заводить объект спутник класса (компаньон), который как-будто бы умеет (вместо имени класса подставляется объект-спутник).
А ещё скала не умеет в несколько конструкторов, поэтому опять вставили костыль в виде объекта-компаньона.
Обожаю продуманные с рождения языки. В общем парни я разобрался.
чего ты вдруг в скалу решил замараться? жизнь потеряла былой огонёк?
J
はい
> いいえ
Уроки японского на говнокоде?
P.S. Блин, киберсквоттеры жгут - скупили домены govno.ru, govno.com, и govno.net.