Bloques de código
Para introducir secuencialidad en la PF, vamos a utilizar los bloques
{
... instruccion 1 ...
... instruccion 2....
...
... instruccion n ....
}
En este caso caso x sólo existe dentro del bloque, por fuera el no existe, las ligaduras creadas dentro de un bloque sólo existen dentro de el.
Imprimir el 10 porque está dentro del contexto (es el primer x que encuentra), y el bloque como valor es 22
val s = {
val s = {
val s = 10
println(s) // Imprime 10 (s interno)
s + 18 // Retorna 28
}
println(s) // Imprime 28 (s del scope medio)
s + 32 // Retorna 60
}
println(s) // Imprime 60
Alcance léxico de la variable s:
- s = 10: Scope más interno, visible solo dentro de su bloque
- s = 28: Scope medio, visible en su bloque y el bloque exterior
- s = 60: Scope externo, resultado final asignado a la variable
Cada declaración val s crea una nueva ligadura que oculta la anterior dentro de su scope, sin afectar las variables del mismo nombre en scopes externos.