cel-java icon indicating copy to clipboard operation
cel-java copied to clipboard

How to override overloads for standard library?

Open LywLover opened this issue 3 years ago • 1 comments

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)

LywLover avatar Feb 26 '22 14:02 LywLover

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).

snazy avatar Mar 01 '22 14:03 snazy