gpt4 book ai didi

Swift 递归枚举

转载 作者:可可西里 更新时间:2023-11-01 02:16:30 24 4
gpt4 key购买 nike

我正在尝试了解有关递归枚举的更多信息。

这是我的代码:

enum Operation {
case Unary((Double) -> Double)
case Binary((Double, Double) -> Double)

indirect case Combined(Operation, Operation)
}

let x = 7.0
let y = 9.0
let z = x + y

let plus = Operation.Binary{$0 + $1}
let squareRoot = Operation.Unary{sqrt($0)}

let combined = Operation.Combined(plus, squareRoot)

switch combined {
case let .Unary(value):
value(z)
case let .Binary(function):
function(x, y)
case let .Combined(mix):
mix(plus, squareRoot)
}

如何依次执行plussquareRoot操作?

我一直收到这个错误:

Cannot call value of non-function type (Operation, Operation)

最佳答案

使用 .Unary.Binary 你做对了。您正在检索函数并执行它们。

但是,使用 .Combined 时,您正在检索一个操作元组并将其用作一个函数。您应该做的是检索元组中的函数并执行它们。

您可以使用递归函数代替 switch,如下所示:

func handleOperation(operation: Operation) {
switch operation {
case let .Unary(value): value(z)
case let .Binary(function): function(x, y)
case let .Combined(op1, op2): [op1, op2].map(handleOperation)
}
}

关于Swift 递归枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37941537/

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