Open
Conversation
Contributor
|
FYI this has been previously approved but reverted in the past because of concern that its behavior with Roblox Instances would be non obvious. |
Author
|
@Kampfkarren that sucks. Because this feature would be great for non-instance objects. Because most of the time you'll still have to check typeof calls, but for tables? ?. would've been great. |
Contributor
|
FWIW I don't really agree with the reasoning anymore, but unless Luau team has changed their mind on this there's basically nowhere to go with it |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
This RFC proposes adding an optional chaining operator (?.) to Luau to enable safe and concise access to nested table fields without requiring explicit nil checks.
Optional chaining short-circuits evaluation when the left-hand side is nil, returning nil instead of raising an error.
Motivation
Accessing deeply nested tables in Luau often requires verbose nil-checking patterns, which reduce readability and are easy to get wrong.
For example,
or Luau-equivalent:
Design
With the optional chaining, the codes written above can be reduced to:
If lang[langName] evaluates to nil, the expression evaluates to nil without error.
Backwards Compatibility
?. operator is already invalid in Lua and Luau, making backwards-compatibility safe to implement.
Drawbacks
Optional chaining must respect existing __index and __newindex semantics.