self & parent
Generated Markdown for references/concept_self_parent.md.
Open book page Back to the skill graph
# self & parent
_Keywords that navigate the enclosing scope — self is the current block, parent the one around it._
Inside a block, the `self` and `parent` keywords are navigators into the document — the same kind of lazy reference a `&T` field holds. `self` resolves to the **current** block (the innermost enclosing scope); `parent` resolves to the block **around** it. Both walk the lexical scope chain upward, so a field can read a sibling or an ancestor without naming the whole path.
## self
`self` names the current block. Member access off it reads a field declared in the same block — handy when a name would otherwise be shadowed, or to be explicit about where a value comes from.
```wcl
box "panel" {
width = 480.0
height = 270.0
// self.width reads this block's own `width` field.
ratio = self.width / self.height
}
```
## parent
`parent` names the enclosing block one level out. Use it to read a value declared on the container from within a nested block. Referencing `parent` at the document root is an error — there is no scope above it.
```wcl
service "web" {
region = "us-east-1"
metadata {
// parent.region reaches the surrounding service block.
inherited_region = parent.region
}
}
```
> [!NOTE]
> **Navigators, not copies**
> self and parent reify to references resolved lazily through lexical scope (innermost block out, then the document root) — the same resolution a `&T` field uses. See [References](../references/concept_references.md).
## Related
- [References](../references/concept_references.md)
- [Fields](../references/concept_fields.md)
- [Blocks](../references/concept_blocks.md)
[← Back to SKILL.md](../SKILL.md)