Tables can also map names to values and read them with a key expression.

table key A table key can be a string, letting code look up values by name.

Key Tables

item
key_tables.lua
Replay: real traced execution (multi-file project)
local item = "apple"
local price = ({apple = 2, banana = 3, pear = 4})[item]
local label = item .. ":" .. price

print("item=" .. item)
print("price=" .. price)
print("label=" .. label)
local item = "banana"
local price = ({apple = 2, banana = 3, pear = 4})[item]
local label = item .. ":" .. price

print("item=" .. item)
print("price=" .. price)
print("label=" .. label)
local item = "pear"
local price = ({apple = 2, banana = 3, pear = 4})[item]
local label = item .. ":" .. price

print("item=" .. item)
print("price=" .. price)
print("label=" .. label)
  1. item ← apple, price ← 2, label ← apple:2

    1local item→ apple = "apple" --@item="banana", "pear"2local price→ 2 = ({apple = 2, banana = 3, pear = 4})[item]23local label→ apple:2 = itemapple .. ":" .. price245print("item=" .. itemapple)6print("price=" .. price2)7print("label=" .. labelapple:2)
    outputitem=apple
    price=2
    label=apple:2
  1. item ← banana, price ← 3, label ← banana:3

    1local item→ banana = "banana"2local price→ 3 = ({apple = 2, banana = 3, pear = 4})[item]33local label→ banana:3 = itembanana .. ":" .. price345print("item=" .. itembanana)6print("price=" .. price3)7print("label=" .. labelbanana:3)
    outputitem=banana
    price=3
    label=banana:3
  1. item ← pear, price ← 4, label ← pear:4

    1local item→ pear = "pear"2local price→ 4 = ({apple = 2, banana = 3, pear = 4})[item]43local label→ pear:4 = itempear .. ":" .. price445print("item=" .. itempear)6print("price=" .. price4)7print("label=" .. labelpear:4)
    outputitem=pear
    price=4
    label=pear:4

Follow the Lookup

  1. item starts as apple.
  2. The lookup table stores apple 2, banana 3, and pear 4.
  3. The price for apple is 2.
  4. label becomes apple:2.
  5. The program prints item=apple, price=2, and label=apple:2. | item | price | label | | --- | --- | --- | | apple | 2 | apple:2 | | banana | 3 | banana:3 | | pear | 4 | pear:4 |

Exercise: key_tables.lua

Reproduce label=apple:2, then use banana and pear to predict each price and label.