2016-02-06 2 views
3

Мне нужно сохранить закрытие, но это не представляется возможным с помощью любых методов настойчивости, доступных в Swift, и я не могу найти какую-либо информацию.Есть ли способ сохранить быстрое закрытие?

+0

Я думаю, вы должны написать виртуальную машину и перевести «быстрый код» во время выполнения, если я не ошибаюсь. Swift не является языком скриптов, весь написанный нами код должен быть скомпилирован в машинный код. Таким образом, вам нужно написать систему, которая может читать скрипты, написанные в синтаксисе Swift, и переводить их в блокировки, и эта система действительно является виртуальной машиной. – MatthewLuiHK

+1

Зачем вам это нужно? Учитывая, что закрытие должно быть определено во время компиляции, нет необходимости в сериализации закрытия. Даже если есть несколько закрытий, которые вы хотите выбрать в зависимости от некоторого значения данных, все, что вам нужно сохранить, это значение, а не фактическое закрытие – Paulw11

+1

, можете ли вы разместить какой-то код? –

ответ

3

Поскольку часть «Кода» фиксируется (скомпилирована), нет необходимости ее сохранять, вам нужно только сохранить ссылку на нее с ключевым словом или каким-либо другим идентификатором. Это может быть достигнуто с помощью словаря со ссылками на функции, например (например, фабрика функций).

Что на самом деле требует персистентности - это переменные, которые захватываются закрытием. Это эквивалентно параметрам функции.

Таким образом, вы, вероятно, должны по-разному подойти к своей проблеме и определить набор ключевых слов функций и списков параметров. Вы можете легко перенести их, а затем «выполнить» данные, передав параметры фабрике функций, связанных с ключевыми словами.

Смежные вопросы