我正在使用 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]) }
错误
Cannot assign through subscript: subscript is get-only
最佳答案
错误信息具有误导性。 Expression.swift定义
public typealias SymbolEvaluator = (_ args: [Double]) throws -> Double
这意味着闭包必须返回一个Double
:
symbols[.function("number", arity: 1)] = { Double($0[0]) }
关于ios - 无法通过下标赋值 : subscript is get-only,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50186867/