Как соединить две строки utf8 вместе в Clarity?

#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 ) .