- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我不知道为什么 this example是模棱两可的。 (我很抱歉没有在这里添加代码,它太长了。)
我添加了 prefix (_ maxLength)
作为 LazyDropWhileBidirectionalCollection
的重载。 subscript(position)
在 LazyPrefixCollection
上定义。然而,上面示例中的以下代码不应该是模棱两可的,但它确实是:
print([0, 1, 2].lazy.drop(while: {_ in false}).prefix(2)[0]) // Ambiguous use of 'lazy'
据我了解,将使用协议(protocol)层次结构中更高层的重载。
根据编译器,它不能在两种类型之间进行选择;即 LazyRandomAccessCollection
和 LazySequence
。 (这没有意义,因为 subscript(position)
不是 LazySequence
的方法。)LazyRandomAccessCollection
将是这里的合乎逻辑的选择。
如果我删除下标,它会起作用:
print(Array([0, 1, 2].lazy.drop(while: {_ in false}).prefix(2))) // [0, 1]
可能是什么问题?
最佳答案
这里的线索太复杂和模糊了。您可以通过删除元素来查看。特别是,删除最后一个下标:
let z = [0, 1, 2].lazy.drop(while: {_ in false}).prefix(2)
在此配置中,编译器想要输入 z
作为LazyPrefixCollection<LazyDropWhileBidirectionalCollection<[Int]>>
.但这不能用整数索引。
我知道感觉应该如此,但当前的编译器无法证明它。
(见下文)所以你的 [0]
失败。而且回溯还不够强大,无法退出这个疯狂的迷宫。具有不同返回类型的重载太多,编译器不知道您想要哪一个。
但这个特殊情况是微不足道的固定:
print([0, 1, 2].lazy.drop(while: {_ in false}).prefix(2).first!)
也就是说,我绝对会避免对编译器施加如此大的压力。这对今天的 Swift 来说太聪明了。特别是返回不同类型的重载在 Swift 中通常不是一个好主意。当它们很简单时,是的,你可以摆脱它。但是当你开始对它们进行分层时,编译器没有足够强大的证明引擎来解决它。 (也就是说,如果我们研究了足够长的时间,我敢打赌它实际上在某种程度上是模棱两可的,但诊断具有误导性。当你进入过于聪明的 Swift 时,这是一种非常常见的情况。)
既然您已经描述了它(在评论中),推理就很简单了。
LazyDropWhileCollection
不能有整数索引。索引下标必须是 O(1)。这就是 Index
的意思下标与其他下标。 (Index
下标还必须返回 Element
类型,否则会崩溃;它不能返回 Element?
。这就是 DictionaryIndex
与 Key
分开的方式。)
由于集合是惰性的并且有任意数量的缺失元素,查找任何特定整数“计数”(第一个、第二个等)是 O(n)。如果不遍历至少 100 个元素,就不可能知道第 100 个元素是什么。要成为一个集合,它的 O(1) 索引必须采用一种只能通过先前遍历序列来创建的形式。不可能是Int
.
这很重要,因为当您编写如下代码时:
for i in 1...1000 { print(xs[i]) }
您希望它大约为 1000 个“步骤”,但如果此集合有一个整数索引,它将大约为 100 万个步骤。通过包装索引,它们可以防止您首先编写该代码。
这在像 Swift 这样的高度通用的语言中尤为重要,在 Swift 中,通用算法层可以轻松地将意外的 O(n) 操作级联成完全不可行的性能(我所说的“不可行”是指你期望花费几毫秒的事情需要几分钟或更多)。
关于swift - 'lazy' 的使用不明确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46257248/
我在 linux 上工作。我对windows没有太多想法。 windows中文件的权限是如何组织的?我们在unix中是否有像chmod这样的api来更改权限? 最佳答案 对于 Windows,有一个名
应用程序编程接口(interface) (API) 是一组用于访问基于 Web 的软件应用程序的编程指令和标准。 如果出现 ,有人可以向我解释一下吗?谷歌地图 或 优酷 这是API哪个是softwar
我有两个应用程序,A 和 B,它们使用 android 库 C。B 有一个服务 A 想通过 C 使用,例如 在我的库中有一个类试图将它绑定(bind)到服务,
我正在正常或安全模式下启动相机应用程序,具体取决于使用我的应用程序执行的手势,但一旦用户选择应用程序并点击始终,则没有选项可以更改默认值,即使是从 Android 的设置菜单中也是如此. camera
我有一个数据集,本质上是一个稀疏二进制矩阵,表示两个集合的元素之间的关系。例如,让第一组是人(用他们的名字表示),例如像这样的东西: people = set(['john','jane','mike
何为pythonic? pythonic如果翻译成中文的话就是很python。很+名词结构的用法在中国不少,比如:很娘,很国足,很CCTV等等。 我的理解为,很+名词表达了一种特殊和强调的意味。
某些 Prolog 目标的确定性成功问题已经一次又一次地出现在 - 至少 - 以下问题: Reification of term equality/inequality Intersection an
我指的是 DateTime.TryParse(string s, out DateTime result) 重载,它尝试从字符串中解析 DateTime - 没有特定的格式正在指定。 我可以从http
2020 年 04 月 10 日,《中共中央国务院关于构建更加完善的要素市场化配置体制机制的意见》正式公布,将数据确立为五大生产要素(土地、资本、劳动力以及技术)之
有人可以解释一下 NSNotification 的 addObserver 函数中 notificationSender 的用途吗? 这是 Apple 文档的解释: notificationSende
我是一名优秀的程序员,十分优秀!