Конкатенация 2 Переменные наборы типов - PullRequest
1 голос
/ 24 апреля 2020
enum sup;
sup=['a','b','c'];


enum sup2;
 sup2=['d','e','f'];

enum sup3;
sup3=sup++sup2;

Я хочу получить новый перечислимый тип sup3 со всеми a, b, c, d, e, f. Есть ли способ в минизине c, мы можем это сделать.

1 Ответ

2 голосов
/ 25 апреля 2020

Краткий ответ - нет, в настоящее время это не поддерживается. Основная проблема с конкатенацией перечислимых типов связана с тем, что мы не просто объединяем два списка вещей, но мы объединяем типы. Возьмите ваш пример:

enum sup = {A, B, C};
enum sup2 = {D, E, F};
enum sup3 = sup ++ sup2;

Когда я сейчас пишу E где-нибудь в выражении, я больше не знаю, имеет ли оно тип sup2 или sup3. Как вы можете себе представить, нет гарантии, что E будет иметь одинаковое значение (для решателя) в двух перечисленных типах, так что это может быть большой проблемой.

Проблески надежды, Команда MiniZin c работала над аналогичным подходом, чтобы сделать это возможным (но пока официально не объявлено). Вместо вашего синтаксиса можно написать:

enum X = {A, B, C};
enum Y = {D, E, F} ++ F(X);

Идея этого заключается в том, что F(X) теперь дает конструктор для использования X в Y. Это означает, что если мы видим только A, мы знаем, что он имеет тип X, но если мы видим F(A), то он имеет тип Y. Опять же, это пока невозможно, но, надеюсь, скоро появится в языке.

...