The definitions within a block are visible from within the block only. The definitions within a block shadow definitions with the same names that belong to the block’s outer scope. The block has a value just as any other expression. Its value is the value of the last expression it includes.
object Program
{
def main(args: Array[String]):Unit =
{
val a = 4
def func(num:Int) = num*num
val number =
{
val b = func(4)
val a = 6
a+b
} + 2
println(number)
}
}
The following video clip goes over the code sample and explains it.







