我正在使用Expression来创建一个非常高级的计算器,它可以从用户那里获取字符串输入。我正在尝试添加函数来为计算器提供更多功能,但是我无法添加自定义或强制转换功能。你能否解释一下我为什么会收到以下错误。
有效的代码
public static let mathSymbols: [Symbol: SymbolEvaluator] = {
var symbols: [Symbol: SymbolEvaluator] = [:]
symbols[.function("atan", arity: 1)] = { atan($0[0]) }
symbols[.function("abs", arity: 1)] = { abs($0[0]) }
symbols[.function("log", arity: 1)] = { log2($0[0]) }
return symbols
}()
输入不起作用
symbols[.function("number", arity: 1)] = { Float($0[0]) }
symbols[.function("number", arity: 1)] = { someFunction($0[0]) }
错误
无法通过下标分配:下标是get-only
答案 0 :(得分:1)
错误消息具有误导性。 Expression.swift定义
public typealias SymbolEvaluator = (_ args: [Double]) throws -> Double
表示闭包必须返回Double
:
symbols[.function("number", arity: 1)] = { Double($0[0]) }