我正在玩使用函数来表示对。我有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()));
}
}