【问题标题】:How to join two utf8 strings together in Clarity?如何在 Clarity 中将两个 utf8 字符串连接在一起?
【发布时间】:2020-12-07 17:01:32
【问题描述】:

在我的 Clarity 智能合约中,我试图将一个字符串(“Hello”)附加到另一个字符串(“to Clarity Language”)。两个字符串的类型都是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))

如何做到这一点?

【问题讨论】:

    标签: blockchain smartcontracts clarity clarity-lang


    【解决方案1】:

    concat 不会优化结果字符串。新字符串的类型为string-utf8,长度为120,将变量类型的长度加上另一个字符串的长度(100 + 20)。

    您必须用as-max-len? 包装concat 调用:

    (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)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-28
      • 1970-01-01
      • 2015-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多