I am having hard time understanding this syntax,
val grid = {
val input = """ 08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08
|49 49 99 40 17 81 18 57 60 87 17 40 98 43 69 48 04 56 62 00
|81 49 31 73 55 79 14 29 93 71 40 67 53 88 30 03 49 13 36 65
|52 70 95 23 04 60 11 42 69 24 68 56 01 32 56 71 37 02 36 91
|22 31 16 71 51 67 63 89 41 92 36 54 22 40 40 28 66 33 13 80
|24 47 32 60 99 03 45 02 44 75 33 53 78 36 84 20 35 17 12 50
|32 98 81 28 64 23 67 10 26 38 40 67 59 54 70 66 18 38 64 70
|67 26 20 68 02 62 12 20 95 63 94 39 63 08 40 91 66 49 94 21
|24 55 58 05 66 73 99 26 97 17 78 78 96 83 14 88 34 89 63 72
|21 36 23 09 75 00 76 44 20 45 35 14 00 61 33 97 34 31 33 95
|78 17 53 28 22 75 31 67 15 94 03 80 04 62 16 14 09 53 56 92
|16 39 05 42 96 35 31 47 55 58 88 24 00 17 54 24 36 29 85 57
|86 56 00 48 35 71 89 07 05 44 44 37 44 60 21 58 51 54 17 58
|19 80 81 68 05 94 47 69 28 73 92 13 86 52 17 77 04 89 55 40
|04 52 08 83 97 35 99 16 07 97 57 32 16 26 26 79 33 27 98 66
|88 36 68 87 57 62 20 72 03 46 33 67 46 55 12 32 63 93 53 69
|04 42 16 73 38 25 39 11 24 94 72 18 08 46 29 32 40 62 76 36
|20 69 36 41 72 30 23 88 34 62 99 69 82 67 59 85 74 04 36 16
|20 73 35 29 78 31 90 01 74 31 49 71 48 86 81 16 23 57 05 54
|01 70 54 71 83 51 54 69 16 92 33 48 61 43 52 01 89 19 67 48 """
.stripMargin
val rows = input.split("\n").map(_.trim)
rows.map(_.split(" ").map(_.toInt))
}
Here grid
is of type Array[Array[Int]]
> I understand that we are creating a 2D array based on some logic inside {}
of grid
. But what is this val grid = {}
, and how can we do calculations inside of it.
In Scala, everything is an expression, and you can combine any sequence of expressions at basically any position in the program.
So here, we assign something to grid
, that something is the content of the {}
block expression. You can have arbitrary sequences of expressions in a block expression, so in your example we start by definining two val
, mostly to make the code easier to read.
Then the last expression, which perform a map
on the previously defined rows
is the expression returned by the block. That is the value that will be assigned to grid
.
A good reason to do such a thing here, is that both input
and rows
are only visible in the block where they are defined. That means they will not be polluting the scope where you use grid
. It's actually very good style.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With