5 ms·
It is, as it should be. I'm struggling to format it nicely here in HN, but I believe that the formatting show here [0] is more readable than JSON or YAML. It gi
by dekelpilli 3y ago
It is, as it should be. I'm struggling to format it nicely here in HN, but I believe that the formatting show here [0] is more readable than JSON or YAML. It gives you type flexibility (instead of JSON's string-only keys). What's the source of your confusion here?
[0] https://github.com/bbatsov/clojure-style-guide#opt-commas-in-map-literals https://github.com/bbatsov/clojure-style-guide#opt-commas-in...
- mkl 3y agoThe confusion is that the order of the key and value can be reversed, and commas are optional, so there's no way to tell at a glance what e.g. the value associated with:bar is.
- eduction 3y ago>the order of the key and value can be reversed This is the case with any hash-map in any language, modulo some of them making certain keys illegal. But "string":"string" can be reversed in pretty much any language's hash-map. >here's no way to tell at a glance what e.g. the value associated with:bar is. You've certainly constructed and formatted a hash-map that is a little tricky to understand, but 1> this combination of key and value types is going to be pretty rare in the wild and 2> to the extent it exists, people would format it to be easier to parse, either by adding commas or newlines.
- dekelpilli 3y ago> the order of the key and value can be reversed That's not true. What you're seeing here is a map where [1 2 3] is the key for the value :baz
- roryokane 3y agoFixed link to that style guide entry: https://guide.clojure.style/#opt-commas-in-map-literals https://guide.clojure.style/#opt-commas-in-map-literals Per that style guide, the above map should be formatted like this: {:a 1 2 :bar [1 2 3] :baz} Most maps written in EDN have keys of a consistent type. A map whose keys are consistently keywords would look like this when formatted: {:a 1 :bar "https://example.com/" :baz [1 2 3]} Or like this, when condensed to one line: {:a 1, :bar "https://example.com/", :baz [1 2 3]} The first map had keys of three different types: keyword `:a`, integer `2`, and vector `[1 2 3]`. Why would one want a format that supports maps with mixed-type keys? As a contrived example, mixed-type keys let you define a sparse 2D tile-based map for a game that is indexed by x and y coordinates: {:default {:type :grass} [0 1] {:type :npc-rival} [2 3] {:type :wall} [2 4] {:type :wall} [100 -5] {:type :treasure, :contents :sword-of-slaying}} HN comment formatting help: https://news.ycombinator.com/formatdoc https://news.ycombinator.com/formatdoc. I indented the above code by two spaces.