mirror of
https://github.com/luau-lang/rfcs.git
synced 2025-05-04 10:43:48 +01:00
Update polymorphic-table-types.md
This commit is contained in:
parent
0f8cb19100
commit
5ee3ee4859
1 changed files with 8 additions and 5 deletions
|
@ -83,12 +83,13 @@ local a = components[A]
|
||||||
-- { [Factory<any>]: any? }[Factory<'Bar'>] ==> any?
|
-- { [Factory<any>]: any? }[Factory<'Bar'>] ==> any?
|
||||||
local b = components[B]
|
local b = components[B]
|
||||||
```
|
```
|
||||||
We've lost our type information of `a` and `b` in the last table step!
|
|
||||||
- "Why not use a getter?"
|
|
||||||
- Mentioned before, API bloat or performance concerns, getting components from this table usually happens during iterations and thousands of times a frame.
|
|
||||||
|
|
||||||
- "Why not implement better metamethod inference?"
|
We've lost our type information of `a` and `b` in the last table step!
|
||||||
- The `components` table guarantees users may define their own metatables. Metatables are not an elegant, reliable, or wholly-acceptable solution to this lack of types. However better inference is always a good thing! This is a great idea for a *different* RFC.
|
|
||||||
|
- "Why not use a getter?"
|
||||||
|
- Mentioned before, API bloat or performance concerns, getting components from this table usually happens during iterations and thousands of times a frame.
|
||||||
|
- "Why not implement better metamethod inference?"
|
||||||
|
- The `components` table guarantees users may define their own metatables. Metatables are not an elegant, reliable, or wholly-acceptable solution to this lack of types. However better inference is always a good thing! This is a great idea for a _different_ RFC.
|
||||||
|
|
||||||
## Design
|
## Design
|
||||||
|
|
||||||
|
@ -131,6 +132,7 @@ We believe that this implementation is a natural step in the direction towards a
|
||||||
`function` $\cong$ `table`
|
`function` $\cong$ `table`
|
||||||
|
|
||||||
### Inferability
|
### Inferability
|
||||||
|
|
||||||
In order for T to be inferable, it must appear in the argument of a function or key of table. If it is not present, the mapped type is left as a free-type, denoted `a`, `b`, ...
|
In order for T to be inferable, it must appear in the argument of a function or key of table. If it is not present, the mapped type is left as a free-type, denoted `a`, `b`, ...
|
||||||
|
|
||||||
```lua
|
```lua
|
||||||
|
@ -148,6 +150,7 @@ In order for T to be inferable, it must appear in the argument of a function or
|
||||||
```
|
```
|
||||||
|
|
||||||
### Indexers
|
### Indexers
|
||||||
|
|
||||||
At the time of this RFC, table types only support a single indexer excluding string keys. This is as complex as a table may be:
|
At the time of this RFC, table types only support a single indexer excluding string keys. This is as complex as a table may be:
|
||||||
|
|
||||||
```lua
|
```lua
|
||||||
|
|
Loading…
Add table
Reference in a new issue