-
-
Couldn't load subscription status.
- Fork 463
New optional array access operator may fail on compilation with nil arrays #593
-
If the compiler knows a variable is nil, the (very cool!) ?.[] operator fails.
Examples:
The following expression fails on compilation:
let arr = nil;
arr?.[3]
The error is:
type <nil>[int] is undefined (4:6)
This one, however, succeed:
let x = 3;
let arr = x < 4 ? nil : [1];
arr?.[0]
Beta Was this translation helpful? Give feedback.
All reactions
Compiler don't know the resulting type of cond ? x : y expression on compilation step.
If type(x) == type(y), compiler assumes return type of whole expression cond ? x : y is type(x).
If type(x) != type(y), compiler assumes retutn type of whole expression cond ? x : y is any.
And in your example: type(nil) != type([1]), so compiler assigns arr any type. And any may support indexing arr[0].
Replies: 1 comment
-
Compiler don't know the resulting type of cond ? x : y expression on compilation step.
If type(x) == type(y), compiler assumes return type of whole expression cond ? x : y is type(x).
If type(x) != type(y), compiler assumes retutn type of whole expression cond ? x : y is any.
And in your example: type(nil) != type([1]), so compiler assigns arr any type. And any may support indexing arr[0].
Beta Was this translation helpful? Give feedback.