5 ms·
It seems like the signature of the functions should be different, especially the second example. I would have written the cmplt function to take tuple pairs:
by RussianCow 7y ago
It seems like the signature of the functions should be different, especially the second example. I would have written the cmplt function to take tuple pairs:
cmplt(
(type_a, value_a),
(type_b, value_b),
)
That's much more clear about the relationship between each pair of values either way, and would get formatted nicely by Black.
- a1369209993 7y agoSorry, should have clarified: my example was written in C[0][1]; cmplt is something like (Dtyp* ,Dval* ,Dtyp* ,Dval* ), which is what I was alluding to with "just need a type checker". Also, in the code I anonymised that from, cmplt and munge are imported (well, #included) functions from a different library. 0: which doesn't have tuples anyway; you could use structs, but it doesn't really work well in context/practice. 1: I don't use python frecently enough to have ready examples of autoformatter stupidity on hand for it.
- edflsafoiewq 7y agoNo it wouldn't; black will put that all on one line if it can. The semantic information in vertical space is lost. A better example is a matrix laid out as a grid, which auto-formatters always destroy mat3x3( 0, a, -b, -a, 0, c, b, -c, 0, )
- a1369209993 7y agoTo be fair, I suspect RussianCow would write that as something like: mat3x3( rowvec3( 0, a, b), rowvec3(-a, 0, c), rowvec3( b,-c, 0), ) Which is probably better, especially with tuples instead of struct{Scalar[3]}. Doesn't fix mat3x3(( 0, a, b),(-a, 0, c),( b,-c, 0)) , though.
- zestyping 7y agoIt would also have been a better way to define the function, in Python 2. def cmplt((type_a, value_a), (type_b, value_b)): return ... I was sad when they removed argument unpacking in Python 3. I thought it was a really elegant feature of the language.
- joshuamorton 7y agoPretty much no one used it, and it was....weird. what do you think the result of def cmplt((type_a, value_a), (type_b, value_b)): return locals() is? Now granted, you shouldn't do that, but what you think it is? a dict with 4 keys, right? {'type_a': ..., 'value_b': ...}. That's wrong. It has those four keys, and two more: '.0' and .1', whose values are the packed tuples. !?!?!