Ошибка вывода типа Java - PullRequest
0 голосов
/ 04 мая 2018

Я играл с использованием функций для представления пар. У меня работала версия Pair<A>, в которой два элемента одного типа. Я продолжал работать над парой A, B. Когда я скомпилировал следующий код, я получил сообщение об ошибке ниже:

fp2.java:34: error: method pairing in class fp cannot be applied to given types;
    return fp.<A,B>pairing().apply(a).apply(b);
             ^
  required: no arguments
  found: no arguments
  reason: actual and formal argument lists differ in length
1 error    

Я почти уверен, что есть проблема с сообщением об ошибке (обязательно и найдено). Не уверен, если javac отклоняет правильное решение или нет. Скорее всего это моя проблема. Может кто-нибудь помочь мне исправить эту ошибку? Или уточните дизайн (чтобы пара A, B могла работать).

public class fp2 {

  interface First<A,B> {
    Function<B,A> apply(A a);
  }

  interface Second<A,B> {
    Function<B,B> apply(A a);
  }

  interface Pair<A,B> {
     A apply(First<A,B> fst);
     B apply(Second<A,B> fst);
  }

  interface I2<A,B> {
    Pair<A,B> apply(B b);
  }

public static <A,B> I3<A,B> pairing() {
    return a -> b -> new Pair<A,B> () {
      public A apply(First<A,B> fst) { return fst.apply(a).apply(b); }
      public B apply(Second<A,B> snd) { return snd.apply(a).apply(b); }
    };
  }

  public static <A,B> Pair<A,B> pair(A a, B b) {
    return fp.<A,B>pairing().apply(a).apply(b);
  }

  public static <A,B> First<A,B> fst() {
    return a1 -> a2 -> a1;
  }

  public static <A,B> Second<A,B> snd() {
    return a1 -> a2 -> a2;
  }

  public static void main(String[] args) {
    Pair<Integer,Double> p1 = pair(1,2.0);
    System.out.println(p1.apply(fst()));
    System.out.println(p1.apply(snd()));
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...