Clarity 智能合约开发教程|理解缓冲区、字符串和列表 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
gitandgit
V2EX    区块链

Clarity 智能合约开发教程|理解缓冲区、字符串和列表

  •  
  •   gitandgit 2021-09-23 18:17:38 +08:00 716 次点击
    这是一个创建于 1478 天前的主题,其中的信息可能已经有所发展或是发生改变。

    英文文档原地址: https://book.clarity-lang.org/ch02-02-sequence-types.html

    序列

    顾名思义,Sequences 序列保存数据序列。Clrity 提供了三种不同类型的序列:缓冲区、字符串和列表。

    缓冲区

    Buffers 是固定最大长度的非结构化数据。它们总是以前缀 0x 开头,后跟一个十六进制字符串。因此,每个字节由两个所谓的十六进制表示。

    0x68656c6c6f21 

    上面的缓冲区意思是“你好!”。 (将其复制并粘贴到此页面以进行验证。)

    字符串

    String 是一个字符序列。这些可以定义为 ASCII 编码字符串或 UTF-8 编码字符串。ASCII 字符串可能只包含基本的拉丁字符,而 UTF-8 字符串可以包含有趣的东西,比如表情符号。两种字符串类型都用双引号 (") 括起来,但 UTF-8 字符串也以 u 为前缀。就像缓冲区一样,字符串在 Clarity 中始终具有固定的最大长度。

    ASCII 编码:

    "This is an ASCII string" 

    UTF-8 编码:

    u"And this is an UTF-8 string \u{1f601}" 

    您可以使用字符串来传递名称和消息。

    列表

    Lists 列表是包含另一种类型的具有固定长度的序列。由于类型不能混合,一个列表只能包含相同类型的项目。以这个有符号整数列表为例:

    (list 4 8 15 16 23 42) 

    如您所见,列表是使用 list 函数构造的。这是一个 ASCII 字符串列表:

    (list "Hello" "World" "!") 

    为了完整起见,下面的示例是一个由于混合类型而无效的列表:

    (list u5 10 "hello") ;; This list is invalid. 

    列表非常有用,可以更轻松地执行批量操作。 (例如,将一些代币发送到一个列表中的一些用户。)您可以使用 map 或 fold 函数迭代列表。

    map 对每个元素执行一个输入函数,并返回一个包含更新值的新列表。not 函数反转布尔值( true 变为 false,false 变为 true )。因此,我们可以像这样反转布尔值列表:

    (map not (list true true false false)) 

    fold 将输入函数应用于列表的每个元素和前一个应用程序的输出值。它还需要一个初始值用于第一个元素的第二个输入。返回的结果是最终应用程序返回的最后一个值。此函数通常也称为 reduce,因为它将列表缩减为单个值。我们可以使用 fold 通过应用初始值为 u0 的 +(加法)函数来对列表中的数字求和:

    (fold + (list u1 u2 u3) u0) 

    上面的代码段可以扩展为以下内容:

    (+ u3 (+ u2 (+ u1 u0))) 

    使用序列

    长度

    序列总是有一个特定的长度,我们可以使用 len 函数检索它。

    缓冲区示例(请记住,每个字节表示为两个十六进制):

    (len 0x68656c6c6f21) 

    字符串示例

    (len "How long is this string?") 

    列表示例

    (len (list 4 8 15 16 23 42)) 

    检索元素

    它们还允许您提取特定索引处的元素。下面从列表中取出第四个元素。 (从 0 开始计数。)

    (element-at (list 4 8 15 16 23 42) u3) 

    您也可以反向操作并在序列中查找特定项目的索引。我们可以搜索列表以查看它是否包含值 23 。

    (index-of (list 4 8 15 16 23 42) 23) 

    我们得到的结果是( some u4 ),表明在索引 4 这个位置的值为 23 。细心的人现在可能想知道,这个“some”是什么?请继续阅读,所有内容将在下一节中揭晓。

    目前尚无回复
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1200 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 22ms UTC 17:28 PVG 01:28 LAX 10:28 JFK 13:28
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86