gpt4 book ai didi

java - MVEL 运算符重载

转载 作者:太空宇宙 更新时间:2023-11-04 15:03:06 24 4
gpt4 key购买 nike

MVEL 使得向解析器上下文提供自定义函数变得非常容易,但尚不清楚是否有“官方”方法来重载运算符的求值方式。我想到了两个具体的用例:

  • 对数组执行算术应该将操作映射到数组的每个元素上,这样:

    [1,2,3] + 1 == [2,3,4]

  • 任何带有 null 操作数的运算都应计算为 null(如 Excel 中的#N/A),这样:

    1 + null == null

如果没有“官方”解决方案,是否有一种明显的方法可以侵入 MVEL 来实现这一点?

最佳答案

第二期

1+ null == null

1* null

如果您实际上在 Mvel API 类中对此进行调试,则对于这种特殊情况,它们会显式返回 false1null

如果 Mvel 能解决这个问题,那就太好了。但我也遇到了同样的问题,所以我们做了什么,我们在执行表达式之前创建了一些智能,我们修改了表达式并包含“IF”条件来检查为空且运算符为“/”或“*”的字段",返回null。

您还可以使用VariableResolverFactory,并传递您的函数,如下所示

 private static VariableResolverFactory getMvelFactory(Map contextMap) {
VariableResolverFactory functionFactory = new MapVariableResolverFactory(contextMap);
MVEL.eval("checkNullValue = def (x) { x == null ? 0 : x };", functionFactory);

return functionFactory;
}

因此,通过此您可以修改可执行表达式,如下所示并返回任何值。基本上需要在 MVEL 之上编写一个包装器。

a + bcheckNullValue(a) + checkNullValue(b)

关于java - MVEL 运算符重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22344299/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com