- Баллы
- 153
-----------------------------------------------------
Разработка VarScript 0.5 (ссылки на другие уроки, полезные функции, модули и т.д.)
VarScript на dev.bukkit.org (скачать можно тут)
-----------------------------------------------------
Объекты varscript и работа с ними
Каждый объект в varscript имеет несколько полей ( связок <Ключ-строка, Значение> )
Создать пустой объект можно командой OBJECT
Записать данные в его поля можно несколькими способами:
Получим на экране {foo=10, bar=12, constructor=FieldableObject{}}
Поле constructor есть у каждого объекта по умолчанию и представляет собой конструктор, с помощью которого был создан объект.
Вот второй вариант заполнения полей объекта
В этом случае объект не лежит постоянно в стеке, а хранится в переменной.
Результат будет аналогичным: {foo=10, bar=12, constructor=FieldableObject{}}
Прочитать значение поля у объекта можно следующей командой:
Вызов функции как конструктора
Для примера, рассмотрим элемент модуля Helljump, но в упрощенном варианте:
попробуем создать объект - платформу.
Теперь мы имеем конструктор платформы (внешне он не отличается от обычной функции).
Чтобы создать новый экземпляр, нужно вызвать функцию с помощью команды NEW:
Теперь в переменной plat содержится объект - платформа
В качестве аргумента мы передали конструктору -1:0:-1 1:0:1 BOX
дословно это означает: регион начиная с позиции -1:0:-1 от меня и до 1:0:1 от меня.
Внутри конструктора этот регион конвертируется в массив блоков (строка 5)
И в итоге теперь в переменной b хранится массив из девяти блоков.
Распечатаем объект plat в виде мапы:
получим: {blocks=blocks{}, constructor=Platform{}}
Это означает, что объект plat содержит функцию(метод) blocks{} в поле blocks
Функция blocks{} вернет нам список блоков, который хранится в переменной b (строка 8)
Вызвать метод у объекта можно такой командой:
В результате мы увидим на экране список из девяти блоков.
Мы не можем изменить значение переменной b внутри объекта, т.к. переменная замкнута внутри конструктора. Однако можем прочитать ее с помощью метода blocks{}
Разработка VarScript 0.5 (ссылки на другие уроки, полезные функции, модули и т.д.)
VarScript на dev.bukkit.org (скачать можно тут)
-----------------------------------------------------
Это пятый тутор по плагину VarScript 0.5
В нем рассматриваются технологии создания конструкторов и объектов
Предполагается, что читатель уже достаточно хорошо знаком с плагином и освоил принцип замыканий.
Объекты varscript и работа с ними
Каждый объект в varscript имеет несколько полей ( связок <Ключ-строка, Значение> )
Создать пустой объект можно командой OBJECT
Записать данные в его поля можно несколькими способами:
Perl:
OBJECT ## создаем пустой объект
10 >>foo ## записываем ему 10 в поле foo
12 >>bar ## записываем ему 12 в поле bar
<Map> PRINT ## распечатать объект в виде {ключ=значение}
Поле constructor есть у каждого объекта по умолчанию и представляет собой конструктор, с помощью которого был создан объект.
Вот второй вариант заполнения полей объекта
Perl:
OBJECT %%a ## создаем пустой объект и пишем в переменную a
10 @a.>foo ## записываем 10 в поле foo объекта a
12 @a.>bar ## записываем 12 в поле bar объекта a
@a <Map> PRINT ## распечатать объект a в виде {ключ=значение}
Результат будет аналогичным: {foo=10, bar=12, constructor=FieldableObject{}}
Прочитать значение поля у объекта можно следующей командой:
Perl:
@a.bar PRINT ## выведет 12
Вызов функции как конструктора
Для примера, рассмотрим элемент модуля Helljump, но в упрощенном варианте:
попробуем создать объект - платформу.
Perl:
%Platform{ ## конструктор платформы
## первый аргумент конвертируется в массив блоков
## и записывается в переменную b
:MAP{<Block>} %%b
$blocks{ ## метод blocks - чтобы прочитать массив блоков
@b
}
}
Чтобы создать новый экземпляр, нужно вызвать функцию с помощью команды NEW:
Perl:
-1:0:-1 1:0:1 BOX @Platform NEW %plat
В качестве аргумента мы передали конструктору -1:0:-1 1:0:1 BOX
дословно это означает: регион начиная с позиции -1:0:-1 от меня и до 1:0:1 от меня.
Внутри конструктора этот регион конвертируется в массив блоков (строка 5)
И в итоге теперь в переменной b хранится массив из девяти блоков.
Распечатаем объект plat в виде мапы:
Perl:
@plat <Map> PRINT
Это означает, что объект plat содержит функцию(метод) blocks{} в поле blocks
Функция blocks{} вернет нам список блоков, который хранится в переменной b (строка 8)
Вызвать метод у объекта можно такой командой:
Perl:
@plat:blocks PRINT
Мы не можем изменить значение переменной b внутри объекта, т.к. переменная замкнута внутри конструктора. Однако можем прочитать ее с помощью метода blocks{}