ceylon - 为什么要在 Ceylon 中创建 Iterable 而不是 Sequence?

标签 ceylon

我已阅读walkthrough about sequences但我真的不明白为什么有一种方法可以同时定义文字可迭代和文字序列。

{String+} iterable = {"String1", "String2"};
[String+] sequence = ["String1", "String2"];

由于 Sequence 是 Iterable 的子类型,因此它似乎应该能够完成 Iterable 所做的所有事情,甚至更多。

那么为什么需要 Iterable 花括号初始化器呢?您什么时候想使用它来代替方括号序列版本?

最佳答案

流是惰性的。

import ceylon.math.float {random}

value rng = {random()}.cycled;

所以这是一个惰性的、无限的随机数流。构造流时不会调用random 函数。另一方面,序列会急切地评估其参数,在本例中,您会得到一遍又一遍地单次调用 random 的结果。另一个例子:

function prepend<Element>(Element first, {Element*} rest) => {first, *rest};

这里,流rest分布在结果流上,但仅按需分布。

关于ceylon - 为什么要在 Ceylon 中创建 Iterable 而不是 Sequence?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28789422/

相关文章:

ceylon - ceylon 的无限迭代生成器

java - Ceylon 比 Java 或 Scala 有什么优势

java - ceylon 目录的 Jimfs 路径

java - 相当于 Ceylon 中的 Java "static"关键字

android - 使用 Ceylon 编写 Android 应用程序

string-concatenation - 连接字符串列表

ceylon - ceylon 在哪里可以使用noop

ceylon - 满足 'Iterable'接口(interface)不涉及Null

guava - ceylon 模块系统 : Guava class mismatch even though there's only one Guava in dependencies tree