我已阅读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/