Необязательный параметр в функциях MVEL - PullRequest
4 голосов
/ 24 ноября 2008

Есть ли способ заставить 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 ...}

Но второе, кажется, полностью переписывает первое определение.

Спасибо

Ответы [ 2 ]

1 голос
/ 13 декабря 2010

В Java вы можете объявить несколько методов с одинаковыми именами, но с разными аргументами. Таким образом, вы можете поддерживать (ограниченным образом) дополнительные параметры. Eg.:

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

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

Вызов метода () возможен с одним или двумя аргументами:)

0 голосов
/ 26 апреля 2011

MVEL имеет ошибку, при которой он принимает методы с varargs, но выполняет метод только с varargs. Таким образом, у вас должен быть метод varargs и non-varargs. Выполните поиск по методу varargs, но будут вызываться только не-varargs.

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. Имейте в виду, что при этом вы потеряете безопасность типов.

...