У меня есть код:
shared Integer getInt() {
return 42;
}
shared Integer() i1() {
return getInt;
}
shared Callable<Integer,Nothing> i2() {
return getInt;
}
shared Callable<Integer,[]> i3() {
return getInt;
}
void run() {
// OK
i1()();
// Illegal `[] is not assignable to Nothing`
i2()();
// OK
i3()();
}
Я не уверен, почему компилятор в порядке с объявлением «i2». Nothing является подтипом всего и, следовательно, подтипом пустого кортежа, поэтому я могу понять, почему я могу сделать объявление. Но как только я это сделал, мне кажется невозможным нормально вызывать «i2», поскольку вызов его без аргументов, пустой кортеж означает вызов его с супертипом того, что он хочет, который Цейлон отвергает. Так можно ли вообще вызвать getInt
, возвращенный из i2?