Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

I recognize destructuring from Clojure. Did it origniate there? Or is this a specific case of pattern matching?


Other languages have this too, eg. Ruby:

  a, b = [1, 2]
  a, b = {:a => 1, :b => 2}
Similarly in Python, at least for the array example (there's probably some way of destructuring a dictionary in Python, but I don't know it myself).

PHP also has `list()`...


For arrays, yes, but that won't work for Ruby hashes (which aren't ordered):

    [1] pry ~ »  a, b = {a: 1, b: 2}
    {
        :a => 1,
        :b => 2
    }
    [2] pry ~ »  a
    {
        :a => 1,
        :b => 2
    }
    [3] pry ~ »  b
    nil


You're quite right, I meant to add `values_at` in the hash example! And the syntax is still not so nice:

  irb(main):005:0> a, b = {:a => 1, :b => 2}.values_at(:a, :b)
  => [1, 2]
Or:

  irb(main):006:0> a, b = (h = {:a => 1, :b => 2}).values_at(*h.keys)
  => [1, 2]
Edit: Ruby's hashes are ordered since 1.9, incidentally.


a, b = {a: 1, b: 2}.values


Common Lisp also has destructuring-bind[0], although its not provided with every implementation.

[0] https://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node252.html


It's basically just pattern matching. Similar things have been around since at least the 70s (e.g. in SASL).


Erlang and Python have destructuring as well - it's a pretty established shorthand.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: