gpt4 book ai didi

swift - 在序列中使用闭包作为 'state'(状态 :next:): function mis-use or Swift limitation?

转载 作者:搜寻专家 更新时间:2023-10-31 22:44:18 24 4
gpt4 key购买 nike

背景

我们可以使用闭包作为inout参数:

func mutate(_ closure: inout () -> Int) {
let num = closure()
closure = { return 2*num }
}

var closure: () -> Int = { return 21 }
print(closure()) // 21
mutate(&closure)
print(closure()) // 42

问题

但是,当我尝试使用闭包作为全局 sequence(state:next:) function 中的(初始)state 参数时,系统提示我出现了一些奇怪的错误(与通常的“公共(public)错误”不同)和堆栈跟踪。

// dummy example not even making use of the state ('foo')
var i = 0
let seq = sequence(
state: { () -> () in () },
next: { (foo: inout () -> ()) -> Int? in
i += 1
guard i < 5 else { return nil }
return i
})

// or
var i = 0
var baz: () -> () = {}
let seq = sequence(
state: bar,
next: { (foo: inout () -> ()) -> Int? in
i += 1
guard i < 5 else { return nil }
return i
})

使用上述内容编译项目产生(除其他外,跟踪等):

Swift compiler error: Command failed due to signal: Illegal instruction: 4

inout writeback in abstraction difference thunk not yet implemented

input value %1 = argument of bb0 : $*@callee_owned (@in ()) -> @out ()

output type $*@callee_owned () -> ()

我自己真的不能从中得到太多,除了它似乎被抛出之外 from swift/lib/SILGen/SILGenPoly.cpp

问题

  • 我们能否以某种方式使用闭包作为 sequence(state:next:) 中的 state,这样我就遗漏了上面的内容?或者这是某种已知的(当前)语言限制?

我正在使用 Xcode 8.1/Swift 3.0.1。

最佳答案

引用@MartinR 对问题的评论,

"... the compiler should never crash"

所以这可能是一个错误,并且已提交错误报告:

关于swift - 在序列中使用闭包作为 'state'(状态 :next:): function mis-use or Swift limitation?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40697279/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com