4 ms·
Lua is very flexible and very fun to hack! With a different approach [0], you can get a switch on tag that feels more like a "standard" switch statement, eg.:
by krajzeg 2y ago
Lua is very flexible and very fun to hack! With a different approach [0], you can get a switch on tag that feels more like a "standard" switch statement, eg.:
result = switch(shape) {
rectangle = function(r)
return "a rectangle with width " .. r.width
end,
function(s)
return "an unknown shape"
end
}
Can't easily get rid of the pesky functions, though.
[0]: https://gist.github.com/krajzeg/9bd8806fb72c1ae22eb931b42b3dbc47 https://gist.github.com/krajzeg/9bd8806fb72c1ae22eb931b42b3d...
- alurm 2y agoI like your approach. (Implicitly) using [1] instead of [false] as a default is less typing for sure (but maybe a bit more confusing?). Also, objects being switched on really have to be tables in my version anyway (since overriding __call for builtin types seems harsh to me), so having a tag field right in them as opposed to creating a metatable should be more efficient. For my version I'll add a value-weak map of metatables to dedup them, should work as well. In terms of functions, yeah, I don't think you can get rid of them, but (in the example) you can avoid (r) and (s) params if you assume that the functions lexically close over shape.