Мне интересно знать, почему в Visualvm OQL возникает проблема со следующим утверждением:
select filter(heap.objects("java.util.HashMap"), isTrue(it));
function isTrue(object) {
return true;
}
Исключение составляет:
javax.script.ScriptException: sun.org.mozilla.javascript.internal.EcmaError: ReferenceError: "it" is not defined. (#1)
В отличие от Visualvm OQL, проблема не возникает.с любым из следующих примеров:
Пример 1 (примечание «оно» не заключено в кавычки):
select filter(heap.objects("java.util.HashMap"),
function(it) {
return true;
});
Пример 2 (примечание «оно» заключено в кавычки):
select filter(heap.objects("java.util.HashMap"), isTrue("it"));
function isTrue(object) {
if (object instanceof String) {
throw "String passed!";
}
return true;
}
Пример 3 («function (it)» по какой-то причине обрабатывается специально в OQL?):
select filter(heap.objects("java.util.HashMap"), function(it) { return isTrue(it); });
function isTrue(object) {
return true;
}
Я спрашиваю об этом, потому что это кажется не интуитивным и появляются варианты неинтуитивного поведениянеожиданно и замедляет меня, когда я пытаюсь создать что-то полезное.