【发布时间】:2017-09-16 18:39:34
【问题描述】:
我不知道为什么this example 是模棱两可的。 (我很抱歉没有在这里添加代码,它太长了。)
我已将prefix (_ maxLength) 作为重载添加到LazyDropWhileBidirectionalCollection。 subscript(position) 在 LazyPrefixCollection 上定义。然而,上面示例中的以下代码不应该是模棱两可的,但它是:
print([0, 1, 2].lazy.drop(while: {_ in false}).prefix(2)[0]) // Ambiguous use of 'lazy'
据我了解,协议层次结构中较高的重载将被使用。
根据编译器无法在两种类型之间进行选择;即LazyRandomAccessCollection 和LazySequence。 (这没有意义,因为subscript(position) 不是LazySequence 的方法。)LazyRandomAccessCollection 将是这里的合乎逻辑的选择。
如果我删除下标,它会起作用:
print(Array([0, 1, 2].lazy.drop(while: {_ in false}).prefix(2))) // [0, 1]
可能是什么问题?
【问题讨论】:
-
编译器输出显示了
lazy的两个可能候选对象 -
能否请您发布相关的“问题代码”?
-
@shallowThought 相关问题代码是第一句链接的最后一行。我已将其添加到上面的帖子中。
标签: swift lazy-evaluation overloading swift4