WarCraft 3: 8. Кортежи

WurstScript
Кортежи позволяют вам группировать несколько переменных под одним именем. Кортежи могут быть использованы для возвращения из функции более чем одного значения, для создания пользовательского типа и, разумеется, повышения удобочитаемости вашей программы.
Имейте в виду, кортежи, это не тоже самое что и классы. Они имеют несколько важных отличий
  • Вам не нужно уничтожать экземпляр кортежа
  • Если вы передаете кортеж между переменными или в качестве параметра функции, вы создаете копию кортежа. Любые изменения копии не окажут никакого эффекта на оригинал
  • Кортежи не могут быть связаны с обобщенными типами. То есть, вы не можете использовать конструкцию List<vec>, если vec это кортеж
Синтаксис объявления и использования кортежей понятен из следующих примеров
Пример 1:
// Объявление кортежа tuple
tuple vec(real x, real y, real z)

init
    // Создание нового кортежа типа vec
    vec v = vec(1,2,3)
    // Изменение аргумента кортежа
    v.x = 4
    // Создание копии кортежа v в переменной u
    vec u = v
    u.y = 5
    if v.x == 4 and v.y == 2 and u.y == 5
        testSuccess()
Пример 2:
tuple point(real x, real y)

init
    point p = pair(1,2)
    // Обмен значений p.x и p.y
    p = point(p.y, p.x)
    if p.x == 2 and p.y == 1
        testSuccess()
Вы можете так же определить расширяющую функцию (см. «Расширяющие функции») для существующего типа кортежа. Однако, помните — изменение кортежа внутри расширяющей функции не повлечет за собой никаких изменений в его оригинале. Поэтому вам придется возвращать новый кортеж каждый раз, когда вы хотите произвести какие-либо изменения.
Можете обратится к пакету Vector(Math/Vectors.wurst) из стандартной библиотеки, если желаете изучить пример использования кортежей.

Просмотров: 117

Doc #1 - 4 месяца назад (отредактировано ) 0
Кортежи не могут быть связаны с обобщенными типами. То есть, вы не можете использовать конструкцию List<vec>, если vec это кортеж
Это такая недоработка компайлера? Не вижу на это причин.
А все, прочитал наоборот, сорян борян.