MVEL 函数中的可选参数

发布于 2024-07-09 11:53:44 字数 494 浏览 10 评论 0原文

有没有办法让 MVEL 2.0 ( http://mvel.codehaus.org/ ) 一起使用带有可选参数的函数?

我希望能够评估这一点:

trunc('blahblah',2)

但也

trunc('blahblah',2,'[...]');

现在我尝试过:

def trunc(param1,param2,param3) { ... impl ... }

如果我尝试仅使用 3 个参数调用它,则会出现异常。 我也尝试过:

def trunc(param1,param2,param3) { ... impl ... } def trunc(param1,param2) { ... impl ... }

但第二个似乎完全覆盖了第一个定义。

谢谢

Is there a way to get MVEL 2.0 ( http://mvel.codehaus.org/ ) to work with functions with optional parameters?

I would like to be able to eval this:

trunc('blahblah',2)

but also

trunc('blahblah',2,'[...]');

Now i have tried:

def trunc(param1,param2,param3) { ... impl ... }

That gives an exception if i try to call it with only 3 parameters.
I also tried:

def trunc(param1,param2,param3) { ... impl ... }
def trunc(param1,param2) { ... impl ... }

But the second one seems to completely overwrite the first definition.

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

山人契 2024-07-16 11:53:44

在 java 中,您可以声明多个具有相同名称但参数不同的方法。
这样您就可以(以有限的方式)支持可选参数。
例如:

private void method(Object obj1) {
    Object obj2 = new Object("Default");
    method(obj1, obj2);
}

private void method(Object obj1, Object obj2) {
    doStuff(...);
}

调用 method() 可以使用一个或两个参数:)

In java you can declare multiple methods with the same name, but a different arguments.
That way you can support (in a limited way) optional parameters.
Eg.:

private void method(Object obj1) {
    Object obj2 = new Object("Default");
    method(obj1, obj2);
}

private void method(Object obj1, Object obj2) {
    doStuff(...);
}

Calling method() is possible with one or two arguments :)

栩栩如生 2024-07-16 11:53:44

MVEL 有一个错误,它接受带有可变参数的方法,但只执行带有非可变参数的方法。 所以你应该同时拥有可变参数和非可变参数方法。 对可变参数方法进行查找,但只有非可变参数才会被调用。

parserContext = new ParserContext();
parserContext.addImport("color", MyImplementation.class.getMethod("color", double[].class));

在您的实现类中:

// This one is used for lookup, but never called.
public static Color color(double... values) {} 

public static Color color(double gray) {}
public static Color color(double red, double green, double blue) {}

如果您想对任意对象类型执行此操作,请使用 Object[].class。 请记住,这样做会失去类型安全性。

MVEL has a bug where it accepts methods with varargs, but only executes the method with non-varargs. So you should have both a varargs and non-varargs method. Do a lookup on the varargs method, but only the non-varargs will get called.

parserContext = new ParserContext();
parserContext.addImport("color", MyImplementation.class.getMethod("color", double[].class));

In your implementation class:

// This one is used for lookup, but never called.
public static Color color(double... values) {} 

public static Color color(double gray) {}
public static Color color(double red, double green, double blue) {}

If you want to do this with arbitrary object types, use Object[].class. Keep in mind that you lose type safety by doing this.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文