Невозможно назначить с помощью индекса: индекс только для получения - PullRequest
0 голосов
/ 05 мая 2018

Я использую Выражение , чтобы создать очень продвинутый калькулятор, который принимает строки ввода от пользователя. Я пытаюсь добавить функции, чтобы дать калькулятору больше возможностей, однако я не могу добавить пользовательские или приведенные функции. Не могли бы вы объяснить, почему я получаю следующую ошибку.

Код, который работает

 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]) }

Error

Невозможно назначить через индекс: индекс только для получения

1 Ответ

0 голосов
/ 05 мая 2018

Сообщение об ошибке вводит в заблуждение. Expression.swift определяет

public typealias SymbolEvaluator = (_ args: [Double]) throws -> Double

, что означает, что закрытие должно возвращать Double:

symbols[.function("number", arity: 1)] = { Double($0[0]) }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...