Interface CallScoring<CALL extends PreparedCall>

Type Parameters:
CALL - тип вызова
All Known Implementing Classes:
DefaultScrolling

public interface CallScoring<CALL extends PreparedCall>

Подсчет кол-ва очков для конкретного вызова.

Дилемма
Допустим у нас есть два метода/функции с одинаковыми названифми, но разными аргументами:
 // Сложение чисел
 int add( int a, int b )

 // Конкатенация строк
 String add( String a, string b )
 
AST дерево: В данном AST дереве отсуствуют типы данных, есть только ссылка на операцию add (задаеться через Eval.context().bind( "+", ссылка на методы add )).

Соответственно, без типов данных нельзя вывести из AST какой метод необходимо вызвать.

В runtime происходит вызов EvalContext.call(String, List)}, где передаются след аргументы
  • inst = null
  • method = "+"
  • args =
    1. "abc"
    2. "def"
В контексте EvalContext.bind(String, Object) задано соответствие + и методов add
Необходимо выбрать подходящий метод из возможных

Основная идея в том, чтоб для нескольких вариантов вызовов выбрать наиболее подходящий, путем подсчет кол-ва очков.

Каждое очко - это дополнительное действие на вызов (конвертация аргментов или еще какая либо метрика)

Тот вариант, который набрал наименьшее кол-во очков будет вызван.
  • Method Summary

    Modifier and Type Method Description
    int calculate​(CALL preparedCall, PreparingCalls scope)
    Подсчет кол-ва баллов для конкретного варианта вызова
  • Method Details

    • calculate

      int calculate​(CALL preparedCall, PreparingCalls scope)
      Подсчет кол-ва баллов для конкретного варианта вызова
      Parameters:
      preparedCall - вариант вызова
      scope - Область из которой был подготовлен вызов
      Returns:
      кол-во баллов