2

我希望以下内容会起作用:

void takeOnlyStrings(String* s) {
   print(s);
}

{String|Integer*} ab = {"Hi", 1};

takeOnlyStrings(for (item in ab) if (item is String) item);

甚至这样:

Boolean isString(Object o) => (o is String);
takeOnlyStrings(ab.filter(isString));

但没有运气。

4

2 回答 2

5

缩小值类型的语法是 prefix is Type val,例如:

void takeOnlyStrings(String* s) {
    print(s);
}

{String|Integer*} ab = {"Hi", 1};

takeOnlyStrings(for (item in ab) if (is String item) item);

语法item is String只是一个产生Boolean值的运算符表达式。它不会缩小其论点的类型。

于 2013-12-06T00:05:03.480 回答
5

这是第二种可能性:在 Ceylon 1.2 中,Iterable.narrow()可以使用新方法:

void takeOnlyStrings(String* s) {
    print(s);
}

{String|Integer*} ab = {"Hi", 1};

takeOnlyStrings(*ab.narrow<String>());

希望有帮助!

于 2015-07-29T21:08:17.250 回答