jvalverde (1) [Avatar] Offline
1) I execute :

var marksSum = 0
var marksCount = 0

def averageMark: Double = marksSum.toDouble / marksCount

def mark(q1: Double, q2: Double, q3: Double): Int = {
val avgScore = (q1 + q2 + q3) / 3
val scoreInScale = avgScore * 10 / 3
val mark = Math.round(scoreInScale)

marksSum += mark
marksCount += 1

And i get three errors :

type mismatch;
[error] found : Int
[error] required: ?{def +(x$1: ? >: Long): ?}
[error] Note that implicit conversions are not applicable because they are ambiguous:
[error] both method int2long in object Int of type (x: Int)Long
[error] and method int2float in object Int of type (x: Int)Float
[error] are possible conversion functions from Int to ?{def +(x$1: ? >: Long): ?}
[error] marksSum += mark
[error] ^
[error] /Main.scala:25:16: value += is not a member of Int
[error] Expression does not convert to assignment because:
[error] overloaded method value + with alternatives:
[error] (x: Int)Int <and>
[error] (x: Char)Int <and>
[error] (x: Short)Int <and>
[error] (x: Byte)Int
[error] cannot be applied to (Long)
[error] expansion: Main.this.marksSum = Main.this.marksSum.+(mark)
[error] marksSum += mark
[error] ^
[error] /Main.scala:27:7: type mismatch;
[error] found : Long
[error] required: Int
[error] mark
[error] ^
[error] three errors found

2) And :

Figure 4.2: Syntax diagram of how to define a variable in Scala.
A variable is an immutable assignment, you can reassign it more than once.

You ment that a variable is a mutable assignment