aviatorscript icon indicating copy to clipboard operation
aviatorscript copied to clipboard

有没有办法支持流式编程语法,或者其他的idea建议?

Open stxpons opened this issue 10 months ago • 2 comments

最典型的,如java8 Stream流式编程。 假设,我注册了几个自定义函数,分别为: trim(charSequence),对字符串进行trim处理 toStream( listOrArray, fn1, fn2, ...fnN ) ,最终输出非空Stream<N> toList( Stream<N> ),最终输出为List<N>

则,java代码: List<String> strings = Arrays.asList("a", "b ", " c"); List<String> trimedStrings = strings.stream().map(String::trim).toList(); 可以用表达式表示为: toList( toStream(strings, 'trim(this)') )。此处this是中间迭代时临时变量,trim(this)是表达式

这种配置,个人是觉得阅读起来相对比较反直觉,期望类似形式为: toStream(strings, 'trim(this)').toList()。此处,上一个toStream函数的输出,默认为下一个函数toList的第1个输入。

或者,类似java8 Stream类似编程,假设我再新增一个自定义的map函数,作用等同于Stream.map,则写成: toStream(strings).map('trim()').toList()

类似的玩法还可以是: trim(string).replace('a', 'b'),表示,先对string变量进行trim处理,再进行字符a替换成字符b。

stxpons avatar Feb 24 '25 07:02 stxpons

实际的表达式案例类似如图。 底下是我格式化后(接手的老系统,表达式存json格式属性里的,故不好格式化),并加了红色翻译描述的。 如果没有格式化+解释描述,是不是很反直觉呢,>_<。

Image

stxpons avatar Feb 24 '25 07:02 stxpons

楼主最终是如何解决的,函数嵌套的方式在表达式比较长的情况下,确实是太不直观了

xuejiawang avatar Jul 04 '25 07:07 xuejiawang