Конечно, вот перевод текста на русский язык:
Пример — библиотека случайных чисел. По умолчанию псевдоним этой библиотеки — random, но если он кажется слишком длинным, можно использовать r.
std.import("RikaScript.Libs.RandomLib", "r") // К сожалению, эта библиотека случайных чисел также была удалена в версии v0.6.
std.log(r.range(0, 100))
// [INFO] 12.5500561262248
Конечно, вы можете удивиться, почему раньше при написании кода не добавляли префикс std. Дело в том, что при импорте каждой функции класса создаётся две копии: одна с префиксом класса, другая без него. Поэтому можно вызывать функции библиотеки двумя способами.
Если имена функций совпадают, то более поздняя функция без префикса будет перекрывать предыдущую. В этом случае можно вызвать функцию только с префиксом.
При написании C# библиотеки можно использовать метод Keep = true, чтобы предотвратить перекрытие функции. Например, все методы в библиотеке std реализованы таким образом.
Среда выполнения включает в себя два основных класса: Runtime и Engine.
Ядром всей системы является класс Runtime, который реализует пошаговое выполнение кода, обработку ошибок переменных, передачу параметров, игнорирование комментариев и т. д. Однако он не может поддерживать структурные операторы, такие как func, if, call и т. п., а только вызов функций и сохранение переменных. Метод Execute класса Runtime может выполнять одну строку кода за раз.
Класс Engine служит оболочкой для Runtime и реализует сложные синтаксические конструкции, которые могут полностью выполнять упомянутые выше коды, такие как if, while, func и т. д. Он также хранит процедуры и предоставляет поддержку синтаксиса set и if xxx {}.
Существует также класс AsyncEngine, унаследованный от Engine, который обеспечивает асинхронное выполнение и позволяет RikaScript не мешать задачам основного потока. Но его стабильность не была тщательно протестирована, поэтому рекомендуется использовать его с осторожностью.
Все библиотеки RikaScript должны наследоваться от класса ScriptLibBase. Этот родительский класс реализует некоторые основные функции каждой библиотеки, такие как информация о классе и получение помощи.
Чтобы добавить дополнительную информацию к классу, используйте атрибут Library. Это почти обязательно.
При импорте библиотеки в RikaScript, независимо от того, используется ли AddLib в C# или import в RikaScript, по сути, создаётся экземпляр объекта библиотеки. Поскольку можно указать псевдоним при импорте, чтобы одновременно импортировать несколько одинаковых библиотек.
Когда вы расширяете свою собственную функцию на основе ScriptLibBase, вам нужно использовать атрибут Method, чтобы раскрыть функцию. Эта функция требует, чтобы возвращаемое значение и параметры были типа object. Следует отметить, что функции, напрямую вызываемые RikaScript, должны иметь возвращаемые значения и типы параметров object, поэтому эти функции могут быть перегружены только путём изменения количества параметров, и количество параметров не должно превышать четырёх.
Method содержит настройки псевдонима, приоритета, сохранения и справки. Например, методы библиотеки std:
[Method(Name = "+", Priority = 10, Keep = true)] // Псевдоним, приоритет, сохранение
public object add(object a, object b){...}
[Method(Name = "*", Priority = 100, Keep = true)]
public object mul(object a, object b){...}
[Method(Keep = true, Help = "Показать все переменные")] // Добавление справки
public void show_vars(){...}
Использование в коде:
log(1 + 2 * 3) // Результат, конечно, равен 7.
log(+(1,2) * 3) // Результатом будет 9.
Класс Runtime использует класс LoggerBase для вывода информации. Вы можете создать свой собственный вывод, наследуя от LoggerBase, например, для реализации вывода для Unity:
using UnityEngine;
using RikaScript.Logger;
public class UnityLogger : LoggerBase
{
public override void Print(object message) {
Debug.Log(message);
}
public override void Info(object message) {
Debug.Log(message);
}
public override void Warning(object message) {
Debug.LogWarning(message);
}
public override void Error(object message) {
Debug.LogError(message);
}
}
Затем при создании RikaScript укажите этот класс:
var rs = new Engine(new UnityLogger());
Классом инструментов является ScriptTools, который можно просмотреть в исходном коде для получения помощи.
В процессе расширения библиотеки классов методы преобразования данных типа object в базовые типы данных записываются в этом инструменте.
Синтаксис | Значение |
---|---|
var var [= value] | Объявление переменной |
set var = value | Присвоение значения переменной |
func name [(параметры)] { | Начало определения метода с именем name |
if value { | Начало определения блока кода if |
while value { | Начало определения цикла while |
} | Завершение блока кода метода |
call func | Выполнение метода |
if value return | Остановить текущий метод или файл в зависимости от переменной |
if value func | Выполнить метод в зависимости от переменной |
while value func | Повторить выполнение метода в зависимости от переменной |
exec path | Выполнить файл RikaScript |
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )