Передача аргументов в пользовательских функциях - PullRequest
0 голосов
/ 05 февраля 2020

Я собирался провести какое-то вычислительное исследование в области nlp и потратил некоторое время на то, как построить наилучшую возможную архитектуру. Спустя некоторое время, рассмотрев некоторые приемы, которые помогают достичь наилучшей производительности (или, по крайней мере, амортизировать ее), я остановился на запоминании функций, которое не поддерживается sql локальной базой данных (в частности, mongodb). Но когда дело дошло до реализации в коде, я застрял.

//i created a class function, which can be inherited when needed
class Function<Arguments, ReturnType>
//it was serving its purpose quite well. Like that
let summ = Function() { (a: Int, b: Int) -> Int in 
    return a + b
}
//some sugar for convenience
let answ = summ <<! (a: 1, b: 1) //type of Arguments is (Int, Int) or tuple of two integers

Затем пришло время сделать кешированную версию:

class CachingFunction<Arguments, ReturnType>: Function<Arguments, ReturnType>

Она все еще инициализируется и работает как раньше, но я не может реализовать мемоизацию, так как для этого мне понадобится Dictionary<Hashable, Value>, что в настоящий момент недостижимо, потому что у него нет Existential types. Моя первоначальная интуиция состояла в том, чтобы проверить кортежи на соответствие протоколу Hashable и вычислить значение ha sh каждого элемента, объединить их и поместить в словарь, но эта попытка также не удалась.

Итак, мой вопрос: Как бы вы вычислили га sh аргументов, представленных как кортеж, или, может быть, я выбрал неправильный подход? Могу ли я справиться с этим Dictionary<AnyHashable, Any>? Должен ли я выбрать другой язык? Пожалуйста, помогите.

...