forked from alexeygritsenko/Scala-Lections
-
Notifications
You must be signed in to change notification settings - Fork 0
/
lec07.scala
77 lines (67 loc) · 2.48 KB
/
lec07.scala
1
2
3
4
5
6
7
8
9
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
// Начало Пропущенный кусок (около 30 минут)
val left = right => right match{
| case left =>{
code code
}
}
val x = 4 => 4 match {
x=>{
}
}
val (x, y) = p
val ((x1, y1), _) = getLine()
val line@(p1@(x1, y1), p2@(x2,y2)) = getLine()
val _::x::tail = List(5,7,9,12) x=7 tail=(9,12)
val Array(z, w) = getNumber()
Если образец не сопоставится, то произойдет исключение. Любой val или var всегда match семантически.
Если функция или лямбда состоит только из match:
x => x match{
…
}
В таком случае первую строку можно не писать.
lstP map {
case (x,y) => x+y
}
lstP.map(x => x match{
…
})
ООП
class <имя> [(список параметров главного конструктора)]
{
…
}
По умолчанию все public.
class Box( l: Int , w: Int, h:Int)
{
val length = l;
…
//val volume = l*w*h
def volume = l*w*h – считать объем при каждом обращении == def volume() = l*w*h
}
// Конец Пропущенный кусок
class Box(...) {
// Является аналогом перегрузки [] в C++
// (не забываем про вызов массивов через ())
// Нету ограничения на число параметров
def apply(name:String)=???
def apply(i:Int)=???
// ? - тип данных "зависимый"
// Последнее - то, что присваиваем, остальное имплекс
def update(s:String, v:?)=?
}
val b1 = new Box(...)
// Вызовет неявно apply
b1("мячик") // b1.apply("мячик")
b1(4)
// Вызовется неявно update
b1("мячик") = new Ball(...)
b1("мячик", 0) = new Ball(...)
// Можно создавтаь объект с именем класса (имя класса и объекта в разных пространствах)
// Такой объект называется объект-компаньон
object Box {
// apply в object!
def apply(l:Int, w:Int) = new Box(l,w,1)
}
// new нету
val b2 = Box(2,3) // Вызоов apply у объекта с именем Box. Стоит обратить внимание, что такой метод может не иметь ничего общего с new
val b1 = new Box(...) // Создание экземпляра класса