Как написать подпись типа функции шаблона в Chapel
При попытке написать функцию среднего арифметического, возможно, лучше написать одну шаблонную функцию, а не две специфические функции типа. Можно писать:
proc mean(data: [?] ?T): real
но как ограничить Т бытием int или real.
Также можно ли определить массив, который может иметь либо int, либо real данные, т. е. существует ли способ выражения типов объединения для содержимого массива?
1 ответ:
Чтобы ограничить тип T типами
intилиrealлюбого размера, вы можете добавить предложениеwhereк определению функции:proc mean(data: [] ?T): real where isIntType(T) || isRealType(T) { ... }Функции
isIntTypeиisRealTypeопределены в модуле типы: http://chapel.cray.com/docs/latest/modules/standard/Types.htmlChapel поддерживает безопасные союзы и массивы союзов. Союзы описаны в разделе 17 спецификации языка Chapel: http://chapel.cray.com/docs/latest/_downloads/chapelLanguageSpec.pdf
union IntOrReal { var i: int; var r: real; } var intRealArray: [1..2] IntOrReal; intRealArray[1].i = 1; intRealArray[2].r = 2.0;