我希望以下内容能够奏效:
void takeOnlyStrings(String* s) {
print(s);
}
{String|Integer*} ab = {"Hi", 1};
takeOnlyStrings(for (item in ab) if (item is String) item);
Run Code Online (Sandbox Code Playgroud)
甚至这个:
Boolean isString(Object o) => (o is String);
takeOnlyStrings(ab.filter(isString));
Run Code Online (Sandbox Code Playgroud)
但没有运气.
缩小值类型的语法是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);
Run Code Online (Sandbox Code Playgroud)
语法item is String
只是一个生成Boolean
值的运算符表达式.它并没有缩小其论证的类型.
这是第二种可能性:在Ceylon 1.2中,Iterable.narrow()
可以使用新方法:
void takeOnlyStrings(String* s) {
print(s);
}
{String|Integer*} ab = {"Hi", 1};
takeOnlyStrings(*ab.narrow<String>());
Run Code Online (Sandbox Code Playgroud)
希望有所帮助!
归档时间: |
|
查看次数: |
189 次 |
最近记录: |