Коллекции
Коллекции позволяют хранить вместе данные различных типов. Кроме этого они могут служить для инициализации массивов и любых других структур. Также коллекции можно использовать для передачи неопределенного количества параметров разных типов в функции и методы. Коллекциям соответствует тип collection. Коллекции определяются с помощью фигурных скобок %{ ... }. Внутри фигурных скобок можно указывать через запятую различные типы данных или другие коллекции.
Коллекциями, не содержащими выражений, можно инициализировать глобальные переменные.
global
{
arrstr months = %{"January", "February", "March", "April", "May",
"June", "July", "August", "September", "October", "November", "December" }
}
Для инициализации переменной определенного типа с помощью коллекций необходимо предварительно описать оператор присваивания коллекции данному типу.
type test
{
uint num
str string
}
operator test =( test left, collection right )
{
if right.gettype( 0 ) != uint : return left
left.num = right.val( 0 )
if right.gettype( 1 ) != str : return left
left.string = right.val( 1 )->str
return left
}
После этого можно инициализировать переменные простым присваиванием:
test myt
myt = %{ 10, "test string" }
Используя параметр-коллекцию в функции, можно передавать неопределенное количество параметров разных типов.
func outvals( collection cl )
{
uint i
fornum i,*cl
{
print("\(i) = \(cl[ i ])\n")
}
}
Вызов этой функции может быть следующим:
outvals( %{ 10, 20, 30, 40 })