cel-java
cel-java copied to clipboard
How to override overloads for standard library?
Hello, Is there a way to override overloads for standard library? Below is part of my code which is not getting the expected result.
@NotNull private static final Overload OVERLOAD_MATCHES = Overload.binary(Overloads.MatchesString, (lhs, rhs) -> {
System.out.println("---override matches---");
String inst = (String) lhs.value();
String target = (String) rhs.value();
boolean result = target.matches(inst);
return result ? BoolT.True : BoolT.False;
});
@Test public void testMatchs() {
boolean result1 = XrayCEL.eval("'1234'.matches(r'\\d+')");
System.out.println(result1); // output: true
boolean result2 = XrayCEL.eval("r'\\d+'.matches('1234')");
System.out.println(result2); // output: false
}
My override for matches is not be called, the log message are not be printed , it still used standard library's matches.
- Standard ->
string.matches(regexString) - Expected ->
regexString.matches(string)
Nope. The r'string' syntax means raw string. CEL has no "regex type" or so.
So both .eval()s in your example are technically StringT.matches(StringT).