V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
gitandgit
V2EX  ›  区块链

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

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

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

    序列

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

    缓冲区

    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   ·   实用小工具   ·   2804 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 15:04 · PVG 23:04 · LAX 07:04 · JFK 10:04
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.