Наследование вариантов
От: ionoy Эстония www.ammyui.com
Дата: 14.06.16 09:08
Оценка:
Есть такой вариант:

variant Build {
| Result { Ast : Ast }
| Error  { Error : string }
| Ignore
}


Хочу чтобы было что-то вроде:

variant Build {
| Result { Ast : Ast }
| Warning : Result { Warning : string }
| Error  { Error : string }
| Ignore
}


Такое реально сделать? Я понимаю, что можно самому иерархию классов замутить, но может быть есть более человеческий способ?
www.livexaml.com
www.ammyui.com
www.nemerleweb.com
Re: Наследование вариантов
От: VladD2 Российская Империя www.nemerle.org
Дата: 14.06.16 10:16
Оценка:
Здравствуйте, ionoy, Вы писали:

I>Такое реально сделать? Я понимаю, что можно самому иерархию классов замутить, но может быть есть более человеческий способ?


Такого нет. Но и наследование тут не нужно. Просто с дублируй поле Ast у обоих вхождений. А обобщенную обработку можно сделать через паттерн-матчинг.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Наследование вариантов
От: ionoy Эстония www.ammyui.com
Дата: 14.06.16 10:26
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, ionoy, Вы писали:


I>>Такое реально сделать? Я понимаю, что можно самому иерархию классов замутить, но может быть есть более человеческий способ?


VD>Такого нет. Но и наследование тут не нужно. Просто с дублируй поле Ast у обоих вхождений. А обобщенную обработку можно сделать через паттерн-матчинг.


У меня куча кода завязана на Build.Result, теперь придётся все эти места искать и дублировать обработку. Поэтому я и пытаюсь найти более простой способ.
www.livexaml.com
www.ammyui.com
www.nemerleweb.com
Re[2]: Наследование вариантов
От: ionoy Эстония www.ammyui.com
Дата: 14.06.16 10:30
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, ionoy, Вы писали:


I>>Такое реально сделать? Я понимаю, что можно самому иерархию классов замутить, но может быть есть более человеческий способ?


VD>Такого нет. Но и наследование тут не нужно. Просто с дублируй поле Ast у обоих вхождений. А обобщенную обработку можно сделать через паттерн-матчинг.


Грубо говоря мне надо протащить дополнительные сообщения из низкоуровнего кода в главный обработчик. Может просто завести поле, которое не нужно передавать параметром конструктора?
www.livexaml.com
www.ammyui.com
www.nemerleweb.com
Re[3]: Наследование вариантов
От: WolfHound  
Дата: 14.06.16 11:02
Оценка: 7 (2)
Здравствуйте, ionoy, Вы писали:

I>Грубо говоря мне надо протащить дополнительные сообщения из низкоуровнего кода в главный обработчик. Может просто завести поле, которое не нужно передавать параметром конструктора?

В опции варианта можно завести ещё один конструктор. И инициализировать его значением по умолчанию.
Примерно так:
https://github.com/rsdn/nitra/blob/master/Nitra/Nitra.Grammar/Model/Rule.n#L78
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[4]: Наследование вариантов
От: ionoy Эстония www.ammyui.com
Дата: 14.06.16 11:04
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Здравствуйте, ionoy, Вы писали:


I>>Грубо говоря мне надо протащить дополнительные сообщения из низкоуровнего кода в главный обработчик. Может просто завести поле, которое не нужно передавать параметром конструктора?

WH>В опции варианта можно завести ещё один конструктор. И инициализировать его значением по умолчанию.
WH>Примерно так:
WH>https://github.com/rsdn/nitra/blob/master/Nitra/Nitra.Grammar/Model/Rule.n#L78

Ага, что-то вроде этого мне и нужно. Спасибо!
www.livexaml.com
www.ammyui.com
www.nemerleweb.com
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.