mvn.py
1.1 KB
#Python #tools #cli #code #Java #Maven
开发过程中处理
为了解决这个问题,我尝试用函数式 cps (编程风格,就是不 return 而带 callback)结果发现很难提供——首先 callsite 也必须提供 [op() for ...] 的上下文,Py 里这个改动是侵入式的,不能隐式传参,其次那必须要
后来提出先
from lxml import builder, etree
def gavTo(e, g,a,v): [e.append(builder.E(t, s)) for t,s in {"groupId":g, "artifactId":a, "version":v}]
root = builder.E("project", builder.E("modelVersion", "4.0.0"))
root.append(builder.E("build", listE("plugin", gavTo, [("org.apache.maven.plugins", "maven-compiler-plugin", "3.1")] ) ))
root.append(listE("dependency", gavTo, [f"org.jcodec:{s}:0.2.3" for s in "jcodec", "jcodec-javase"]))
gavTo(root, "trumeet","asciiart","1.0-SNAPSHOT")
print(etree.tostring(root))
...https://paste.ubuntu.com/p/K29vXcjY87/开发过程中处理
org.jcodec:-,--javase:0.2.3
这种转换时我咧嘴了——在 gavTo
发现要展开简写时,listE
无法提供重新 add 的方法,因为它是面向 ops.forEach { it(data) }
的映射!为了解决这个问题,我尝试用函数式 cps (编程风格,就是不 return 而带 callback)结果发现很难提供——首先 callsite 也必须提供 [op() for ...] 的上下文,Py 里这个改动是侵入式的,不能隐式传参,其次那必须要
def
里另起一行 后来提出先
gavSplit
再 flatten
(Py 不能 flatMap
但有对 map(f,xs)
参数的 starmap
... 兼容不到我这面),包括结构的类型都很完美。