Skip to content

Conversation

@AlexeyMK
Copy link

@AlexeyMK AlexeyMK commented Jun 9, 2015

Adding support for CoffeeScript/ES6-style dictionaries in python.

Example & Explanation

name = "Bob"
age = 24

# traditional python ways
person = {"name": name, "age": age, "version": 1}
person2 = dict(name=name, age=age, version=2)

But in CoffeeScript, you can just do

cs_person = {name, age, version: "cs"}

The feature is known as the Object Literal Property Value Shorthand, and is coming to Javascript as of ES6

Now you can use it in python, too, with MacroPy.

from macropy.d import macros, d

person3 = d(name, age, version=3)
> {"name": "Bob", "age": 24, version: 3}  

Implementation

This was a bit of a pain to implement without MacroPy, since the Python call stack doesn't include the expressions passed, and inspect is slow.

Even with MacroPy, without forking the project I'd need to use a lookup and a slice, a la

d[dict(name, age, version=3)]
# or, and I thought this was clever
d[ct(name, age, version=3)]

I showed d[ct to an unbiased python programmer and they said versions 1/2 looked way cleaner and they'd probably not use it. Fair enough. So I needed to make d(...) work directly.

I ended up needing to fork and slightly modify MacroPy to support changing the syntax tree to support function calls. Hopefully this is an acceptable addition.

@AlexeyMK
Copy link
Author

Let me know if this looks interesting, @lihaoyi, and I'll get some tests & more documentation as well.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant