Hacker News new | ask | show | jobs
by krajzeg 534 days 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/9bd8806fb72c1ae22eb931b42b3d...

1 comments

I 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.