Defining elements in a table that is within another table?

I’ve been having a hard time with this and I’m not sure why it’s so difficult for me to understand.

Let’s say I have a shopping cart.

local cart = {
	bananas = 2;
	apples = 4;
}

Then let’s add the purse as well.

local cart = {
	bananas = 2;
	apples = 4;
	purse = {
		cash = 20;
		debit = 100;
	};
}

When I define the element within purse I get this nil from output, which confuses me?

print(table.find(cart.purse,2))
> nil

Or if I wanted to call the element specifically on its own it still calls nil.

print(table.find(cart.purse,"cash"))
> nil

What am I doing wrong here?

table.find only works on arrays, not dictionaries. Lua arrays are ordered, so a linear search algorithm is performed whereas this wouldn’t be possible with dictionaries that are unordered.

1 Like

Would that really be necessary tho? If you index for something that doesn’t exist, nil is returned.

local t = { a = 1 }
print(t.b) --> nil
1 Like

So if you don’t recommend this solution, what’s an alternative I can try?

Look at the above reply by @sjr04. Simply check if cart.purse exists and if so, check if cart.purse.cash exists.

local foundCash = cart.purse and cart.purse.cash
--nil or cash value
1 Like

To define the element within the purse, do

cart.purse.cash

If you want to call the element specifically on its own, do

_cashInPurse = cart.purse.cash

(This will error if purse is nil, but it won’t if cash is nil, it will just return nil)

1 Like