私はコードを持っています:
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」を引数なしで呼び出すことは不可能に思えます。空のタプルは、Ceylonが拒否する、必要なもののスーパータイプで呼び出すことを意味します。getInt
それで、i2から返されたを呼び出すことはまったく可能ですか?