FAQ
Этот раздел будет понемногу наполняться ответами на главные вопросы касающихся SLThree.
Методы
Почему эти сущности называются методами, а не функциями? Это потому, что все методы хранят контекст, в котором их описали:
- my_context = new context {
- private.x = 25;
- get_x = () => private.x;
- set_x = (arg) => private.x = arg;
- get_x2 = () => this.get_x() * 2;
- };
- my_context.get_x2(); // 50
Контексты
Контекст — единственный, помимо методов, составной тип данных непосредственно языка SLThree. Особые возможности контекста:
Превращение в любые типы
Вы можете использовать контексты как инициализаторы полей классов. Для этого у класса должен существовать конструктор без аргументов.
- context a : SLThree.BinaryAdd {
- Left = 3 as is;
- Right = 4 as is;
- }
- a();
Разворачивание контекста
Контексты в SLThree являются ссылками типа ContextWrap. Истинный же контекст имеет тип ExecutionContext. Чтобы получить объект этого типа из любого контекста, нужно вызвать для него unwrap. Разворачивание контекста относится к возможностям рефлексии SLThree. С помощью развёрнутого контекста можно:
- Поменять имя контекста
- Получить его приватный контекст
- Получить переменные в виде словаря
- Получить возвращённое значение
- cnt = this.unwrap();
- ref = cnt.wrap;
- ref == this;
- private_of_this = cnt.private;
- private_of_this == private;
- return 25 * 25;
- ret = cnt.ReturnedValue;
- name = cnt.Name = "EFDEsssFSDGDFfd";
- this;
- cnt.LocalVariables.GetAsDictionary();
Прочее
Откуда берутся типы?
Типы берутся из сборок, находящихся в списке slt.registred:
- using slt;
- slt.registred.Contains((@any).Assembly);