#blockchain #smartcontracts #clarity #clarity-lang
#блокчейн #smartcontracts #ясность #clarity-язык #стеки-блокчейн
Вопрос:
В моем смарт-контракте Clarity я пытаюсь добавить одну строку («Привет») к другой строке («на языке Clarity»). Обе строки имеют тип string-utf8
.
Развертывание приведенного ниже контракта завершается ошибкой: expecting expression of type '(string-utf8 100)', found '(string-utf8 120)'
(define-data-var a-string (string-utf8 100) u"Hello")
(var-set a-string (concat (var-get a-string) u" to Clarity Language"))
(print (var-get a-string))
Как заставить это работать?
Ответ №1:
concat
не оптимизирует результирующую строку. Новая строка имеет тип string-utf8 длиной 120, добавляя длину типа переменной к длине другой строки (100 20).
Вы должны обернуть concat
вызов с помощью as-max-len?
:
(define-data-var a-string (string-utf8 100) u"Hello")
(var-set a-string
(unwrap! (as-max-len?
(concat (var-get a-string) u" to Clarity Language") u100) (err "text too long")))
(print (var-get a-string))
Обратите внимание, что длина типа определяется с помощью int
функции ( 100
), в то время as-max-len?
как принимает uint
параметр ( u100
) .