Why in this example, no error is thrown and b ends up holding default value?
scala> val b = a; val a = 5
b: Int = 0
a: Int = 5
Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.
Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.
Lost your password? Please enter your email address. You will receive a link and will create a new password via email.
Please briefly explain why you feel this question should be reported.
Please briefly explain why you feel this answer should be reported.
Please briefly explain why you feel this user should be reported.
When you do this in the REPL, you are effectively doing:
b and a are assigned to in order, so at the time when you’re assigning b, there is a field a, but it hasn’t yet been assigned to, so it has the default value of 0. In Java, you can’t do this because you can’t reference a field before it is defined. I believe you can do this in Scala to allow lazy initialisation.
You can see this more clearly if you use the following code:
You can have the correct values assigned if you make a a method:
or you can make b a lazy val: