В последней версии surfboard
, интерфейса командной строки для работы с языком программирования Ride теперь доступна новая команда: surfboard repl
. - полнофункциональная программа Read-Print-Eval-Loop for Ride. Он позволяет намного быстрее проводить тестирование и обучение, а также предоставляет полную стандартную библиотеку встроенных функций и определений констант. С сегодняшнего дня эта функция также доступна в Waves IDE.
Ride REPL для IDE и доски для серфинга
Новая функция уже доступна как в Waves IDE, так и в CLI для досок для серфинга.
Если вы предпочитаете surfboard
, установите / обновите инструмент:
npm i -g @waves/surfboard
При запуске повторная доска для серфинга будет выглядеть так:
{ ~ } » surfboard repl Welcome to RIDE repl Compiler version 1.1.3-x-xxxxxx You can use ?{term} to look up a specific definition, ?? to get the full context :clear to clear console, :reset to restart repl, .editor to enter multiline RIDE >
Особенности REPL
Ride REPL в значительной степени следует стандартам других REPL, полностью поддерживая синтаксис и семантику языка.
Определение и использование переменных и функций:
RIDE > 2 + 2 res1: Int = 4 RIDE > let x = 42 defined let x: Int RIDE > func inc(i:Int) = i + 1 defined func inc(i: Int): Int RIDE > inc(inc(res1)) + inc(x) res4: Int = 49
Также доступны все криптографические функции:
RIDE > sha256(base58'') res3: ByteVector = GKot5hBsd81kMupNCXHaqbhv3huEbxAFMLnpcX2hniwn
Работа с живым блокчейном
Если вам нужно опробовать API на основе блокчейна, например height
, getInteger(account,key)
в surfboard
, убедитесь, что ваш surfboard.config.json
правильно настроен. Для начала просто выполните surfboard init
в пустом каталоге. Используемая конечная точка - это та, которая настроена в разделеAPI_BASE
, this
является производным от разделов SEED
и CHAIN_ID
. Общее руководство пользователя можно найти на гитхабе.
IDE использует конечную точку, настроенную в настройках, и выбранную учетную запись для this
.
RIDE > height res3: Int = 41806 RIDE > getInteger(this, "dataKey") res2: Int|Unit = 42
Изучение стандартной библиотеки
Вы можете запросить сигнатуру функции, определение типа или объявление значения с помощью команды ?
:
RIDE > ? getInteger func getInteger(data: List[DataEntry], key: String): Int|Unit func getInteger(data: List[DataEntry], index: Int): Int|Unit func getInteger(addressOrAlias: Address|Alias, key: String) : Int|Unit
??
выводит все существующие определения.
Поскольку определения значений Ride неизменяемы, вы не можете переопределить их в REPL. Команда :reset
очищает состояние REPL, удаляя все существующие определения.
.editor
переходит в многострочный режим, поэтому вы можете ввести или вставить более крупный блок, выражение или несколько определений.
Поддерживается макрос FOLD ‹N›
Подробное объяснение этой функции можно найти здесь.
RIDE > func sum(a:Int, b:Int) = a + b defined func sum(a: Int, b: Int): Int RIDE > let arr = [1,2,3,4,5] defined let arr: List[Int] RIDE > FOLD<5>(arr, 0, sum) res1: Int = 15
TL; DR: surfboard repl
- это самый простой способ опробовать язык Ride и его семантику выполнения. Нет необходимости писать, развертывать и использовать полный контракт, чтобы проверить, sha256(base58'')
или "x|x||".split("|")
работает должным образом, однострочный REPL может ответить на большинство вопросов.