1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/LrikaM-rika-script

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README.md 8.4 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 30.11.2024 14:41 ce44354

Конечно, вот перевод текста на русский язык:

Пример — библиотека случайных чисел. По умолчанию псевдоним этой библиотеки — random, но если он кажется слишком длинным, можно использовать r.

std.import("RikaScript.Libs.RandomLib", "r") // К сожалению, эта библиотека случайных чисел также была удалена в версии v0.6.
std.log(r.range(0, 100))
// [INFO] 12.5500561262248

Конечно, вы можете удивиться, почему раньше при написании кода не добавляли префикс std. Дело в том, что при импорте каждой функции класса создаётся две копии: одна с префиксом класса, другая без него. Поэтому можно вызывать функции библиотеки двумя способами.

Если имена функций совпадают, то более поздняя функция без префикса будет перекрывать предыдущую. В этом случае можно вызвать функцию только с префиксом.

При написании C# библиотеки можно использовать метод Keep = true, чтобы предотвратить перекрытие функции. Например, все методы в библиотеке std реализованы таким образом.

Введение в архитектуру кода C#

Среда выполнения

Среда выполнения включает в себя два основных класса: 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 в базовые типы данных записываются в этом инструменте.

Обзор синтаксиса RikaScript — соответствует версии v0.8?

Синтаксис Значение
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 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/LrikaM-rika-script.git
git@api.gitlife.ru:oschina-mirror/LrikaM-rika-script.git
oschina-mirror
LrikaM-rika-script
LrikaM-rika-script
master