如何以优雅的方式按照锡兰的类型进行过滤?

时间:2013-12-05 22:03:59

标签: ceylon

我希望以下内容能够奏效:

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));

但没有运气。

2 个答案:

答案 0 :(得分:5)

缩小值类型的语法是前缀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值的运算符表达式。它并没有缩小其论证的类型。

答案 1 :(得分:5)

这是第二种可能性:在Ceylon 1.2中,可以使用新方法var fullscreen = document.getElementById('fix-fullscreen'), player = document.getElementById('player'); fullscreen.addEventListener('click', function (e) { if (~player.src.indexOf('?')) player.src += '&autoplay=1'; else player.src += '?autoplay=1'; var req = player.requestFullscreen || player.webkitRequestFullscreen || player.mozRequestFullScreen || player.msRequestFullscreen; req.call(player); e.preventDefault(); });

Iterable.narrow()

希望有所帮助!