Yes, I was shocked at how small it is. I had no experience working with such limited resources going into this project. Our router had 32MB of storage. At one point I was looked into adding a python interpreter, and it was like 11MB. The Lua interpreter is like 250KB. Tiny!
Also, the ternary operator has the best syntax of any language I have ever used.
x = [condition] and [true value] or [false value]
No question marks or colons or anything weird. It’s a logical extension of && and || after commands in bash using keywords since it is a verbose language. I wish every language had this syntax.
For contrast, python is:
x = [true value] if [condition] else [false value]
It just seems weird to me to have the condition in the middle.
Yeah, I’ve always hated Python’s ternary, and I use it every day at work. Though you can do the same in Python if you want:
x = [condition] and [true value] or [false value]
I consider that bad style because the dedicated syntax is preferred. You can also do similar in JS:
x = [condition] && [true value] || [false value]
The caveat in both (and Lua) is that you’ll get the false value if the true value is falsey.
My favorite syntax is Rust:
x = if [condition] { [true value] } else { [false value] };
This preserves the flow you get with the ? :, allows [true value] to be falsey, and is idiomatic without having a lot of extra syntax.
My favorite thing about Lua is that tables separate numeric from string keys, so you can do this:
x = { metadata = ... }
x[1] = 3
x[2] = 4
print(#x) -- prints 2
This is really nice for representing something like an XML/HTML DOM, where numeric indices are child nodes, and string keys are attributes. Or you can store metadata about a list in the list itself (e.g. have a reference to the max value, min value, etc). It’s just really nice to work with.
Yeah, I’ve always hated Python’s ternary, and I use it every day at work. Though you do the same in Python if you want:
x = [condition] and [true value] or [false value]
I consider that bad style because the dedicated syntax is preferred. You can also do similar in JS:
x = [condition] && [true value] || [false value]
The caveat in both (and Lua) is that you’ll get the false value if the true value is falsey.
My favorite syntax is Rust:
x = if [condition] { [true value] } else { [false value] };
This preserves the flow you get with the ? :, allows [true value] to be falsey, and is idiomatic without having a lot of extra syntax.
My favorite thing about Lua is that tables separate numeric from string keys, so you can do this:
x = { metadata = ... }
x[1] = 3
x[2] = 4
print(#x) -- prints 2
This is really nice for representing something like an XML/HTML DOM, where numeric indices are child nodes, and string keys are attributes. Or you can store metadata about a list in the list itself (e.g. have a reference to the max value, min value, etc). It’s just really nice to work with.
Yes, I was shocked at how small it is. I had no experience working with such limited resources going into this project. Our router had 32MB of storage. At one point I was looked into adding a python interpreter, and it was like 11MB. The Lua interpreter is like 250KB. Tiny!
Also, the ternary operator has the best syntax of any language I have ever used.
x = [condition] and [true value] or [false value]
No question marks or colons or anything weird. It’s a logical extension of
&&
and||
after commands in bash using keywords since it is a verbose language. I wish every language had this syntax.For contrast, python is:
x = [true value] if [condition] else [false value]
It just seems weird to me to have the condition in the middle.
Yeah, I’ve always hated Python’s ternary, and I use it every day at work. Though you can do the same in Python if you want:
I consider that bad style because the dedicated syntax is preferred. You can also do similar in JS:
The caveat in both (and Lua) is that you’ll get the false value if the true value is falsey.
My favorite syntax is Rust:
This preserves the flow you get with the
? :
, allows [true value] to be falsey, and is idiomatic without having a lot of extra syntax.My favorite thing about Lua is that tables separate numeric from string keys, so you can do this:
This is really nice for representing something like an XML/HTML DOM, where numeric indices are child nodes, and string keys are attributes. Or you can store metadata about a list in the list itself (e.g. have a reference to the max value, min value, etc). It’s just really nice to work with.
Haskell’s
if
is pretty nice:if cond then truthy else falsy
Yeah, I’ve always hated Python’s ternary, and I use it every day at work. Though you do the same in Python if you want:
I consider that bad style because the dedicated syntax is preferred. You can also do similar in JS:
The caveat in both (and Lua) is that you’ll get the false value if the true value is falsey.
My favorite syntax is Rust:
This preserves the flow you get with the
? :
, allows [true value] to be falsey, and is idiomatic without having a lot of extra syntax.My favorite thing about Lua is that tables separate numeric from string keys, so you can do this:
This is really nice for representing something like an XML/HTML DOM, where numeric indices are child nodes, and string keys are attributes. Or you can store metadata about a list in the list itself (e.g. have a reference to the max value, min value, etc). It’s just really nice to work with.