I'm a scala beginner and trying to understand how val works in Scala. I read that vals cannot be modified. When I do the following:
for( line <- Source.fromFile(args(0)).getLines() ) {
val currentLine = line
println(currentLine)
}
currentLine is updated in each iteration, while I expect it to be initialized with the first line and hold it till the end, or at least give a re-initialization error of some sort. Why is this so? Is the val created and destroyed in each iteration? My second question: I would like to use x outside if in the following code.
if( some condition is satisfied) val x = 2 else val x = 3
As of now, I'm getting an "Illegal start of simple expression" error. Is there a way to use x outside if?
For Loop
You can break it down into a map
operation.
for( line <- Source.fromFile(args(0)).getLines() ) {
val currentLine = line
println(currentLine)
}
So this code transforms to
Source.fromFile(args(0)).getLines().map( line => block )
block
could be any expression. Where in your case block
is:
{
val currentLine = line
println(currentLine)
}
Here currentLine
is local to block
and is created for each of the values of line
given to map
operation.
If-Else
Again following is also wrong:
if( some condition is satisfied) val x = 2 else val x = 3
Essentially if-else
in Scala returns a value. So it should be:
if( condition ) expression1 else expression1
In your case you it can be:
if( condition ) { val x = 2 } else { val x = 3 }
However an assignment returns Unit
( or void
if you want an analogy with Java / C++ ). So You can simply take the value of if-else
like so:
val x = if( condition ) { 2 } else { 3 }
// OR
val x = if( condition ) 2 else 3
Yes, the val
is created and destroyed on each iteration.
val x = if(condition) 2 else 3
would do what you want.
Edit: You could rewrite 2. to if(conditon) {val x = 2} else {val x = 3}
(to make it compile) but that would do nothing, since the if does not return anything and the variable can not be used outside the if
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