В чем смысл predicate.arg(1) и predicate.arity в java

У меня есть код Java, который я пытаюсь перевести на vb.net. Он использует «предикаты», функцию, о которой я не знал до сих пор, но которая существует и в vb.net.

Итак, я прочитал документацию по нему, но ни один из них не объясняет код Java, который у меня есть, в частности, если у вас есть переменная «p», объявленная как предикат, что делает p.arity, и что делает p.arg (0) и p.arg(1) вернуть?

У меня сложилось общее впечатление, что предикат берет набор объектов и возвращает подмножество, соответствующее определенному критерию (например, учитывая набор всех баскетболистов, возвращать только тех, кто выше 6 футов ростом). Но следующий код, похоже, не имеет к этому никакого отношения:

    // st is assumed to be a list of ECHO predicates
    //
  private void parseInput(StreamTokenizer st) throws IOException
  {

while (st.nextToken() != StreamTokenizer.TT_EOF) {
  st.pushBack();
  Predicate p = new Predicate(st);
  parsePredicate(p);
} // while
  }


  // PRE: p is non-null
  // POST: performs the additions to the ECHO graph required by the
  //       ECHO predicate; if p is not a legal ECHO predicate, an 
  //       IOException is thrown
  //
  private void parsePredicate(Predicate p) throws IOException
 {
Assert.notNull(p);
String name = p.name();

if (name.equalsIgnoreCase(explainPred)) {
  parseExplain(p);
} else if (name.equalsIgnoreCase(dataPred)) {
  parseData(p);
} else if (name.equalsIgnoreCase(contradictPred)) {
  parseContradict(p);
} else if (name.equalsIgnoreCase(analogyPred)) {
  parseAnalogy(p);
} else if (name.equalsIgnoreCase(propositionPred)) {
  parseProposition(p);
} else {
  throw new IOException("ECHO: "+name+" is not a legal predicate name. "+
                                                "Must be one of "+explainPred+", "+dataPred+", "+
                                                contradictPred+", or "+analogyPred);
} // if
  }

  //
  // PRE: p's name is explainPred
  // POST: adds the given explanation predicate to ECHO, adding all necessary
  //       links; throws an exception if p is not a legal explains predicate
  //
  private void parseExplain(Predicate p) throws IOException
  {
//msg("in parseExplain...");
int arity = p.arity();
float weight;
List propList;
String explainee;

if (arity == 2) {
  //msg("arity == 2");
  propList = (List)p.arg(0);
  explainee = (String)p.arg(1);
  weight = (float)explainWeight(propList.length());
} else if (arity == 3) {
  //msg("arity == 3");
  propList = (List)p.arg(0);
  explainee = (String)p.arg(1);
  float strength = Float.valueOf((String)p.arg(2)).floatValue();
  weight = (float)(strength*explainWeight(propList.length()));
} else {
  throw new IOException("ECHO: an explains predicate must have 2 or 3 "+
                                                "arguments: "+p);
    } // if

Вы должны выяснить, что такое Predicate, так как javadoc не упоминает о существовании методов arity и arg, поэтому, вероятно, он не является частью стандартной кодовой базы Java.

BackSlash 08.04.2019 16:04

Используемый здесь класс Predicate не имеет ничего общего со стандартом Java java.util.function.Predicate. Это дело Майкрософт?

Maurice Perry 08.04.2019 16:07

Я заметил, что в начале кода есть следующее: import predicate.*; У него нет префикса java, так что, возможно, это специально написанная библиотека java, которая, к сожалению, имеет то же имя, что и функция Java?

Mark Springer 08.04.2019 20:05
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
3
112
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В этом случае я предполагаю следующее:

арность — это количество параметров, которые принимает функция. Вы можете видеть, что после проверки, равна ли арность 2, он считывает два аргумента (arg(0) и arg(1)). Таким образом, arg — это просто метод получения параметра/аргумента по заданному индексу.

Затем, когда арность равна 3, вы можете получить три аргумента; 0, 1, 2

Другие вопросы по теме