原英文文档链接: https://book.clarity-lang.org/ch02-01-primitive-types.html
原始类型
原始类型是最基本的组件。它们是:有符号和无符号整数、布尔值和主体用户。
有符号整数
int,(有符号)整数的缩写。这些是 128 位数字,可以是正数也可以是负数。最小值为 -2 的 127 次方,最大值为 2 的 127 次方 - 1 。一些示例:0 、5000 、-45 。
无符号整数
uint,无符号整数的缩写。这些是只能为正数的 128 位数字。因此最小值为 0,最大值为 2 的 128 次方 - 1 。 无符号整数总是以字符 u 为前缀。一些示例:u0 、u40935094534 。
Clarity 有许多内置函数,它们接受有符号或无符号整数。
加法:
(+ u2 u3)
减法:
(- 5 10)
乘法:
(* u2 u16)
除法:
(/ 100 4)
请注意,整数总是整数——没有小数点。在写代码时要记住这一点。
(/ u10 u3)
如果您将上述内容输入计算器,您可能会得到 3.3333333333.... 不是整数!上面的表达式计算结果为 u3,小数部分被舍弃。
还有更多的函数将整数作为输入。我们将在本书后面讨论其余部分。
布尔值
bool,布尔值的缩写。布尔值是 true (真)或者 为 false (假)。它们用于检查某个条件是否满足或未满足(真或假)。一些接受布尔值的内置函数:
not (反转布尔值):
(not true)
and (如果所有的输入都是 true,则返回 true):
(and true true true)
or (如果有一个输入是 true,则返回 true):
(or false true false)
主体用户
principal (主体)是 Clarity 中的一种特殊类型,代表区块链上的一个 Stacks 地址。它是一个唯一标识符,您可以大致等同于电子邮件地址或银行帐号——尽管绝对不一样!您可能也听说过钱包地址这个词。Clarity 接受两种不同类型的主体用户:标准主体用户和合约程序主体用户。标准主体用户由相应的私钥支持,而合约程序主体用户指向智能合约。主体用户遵循特定的结构,并且始终以字符 SP 开头,代表 Stacks 主网。以 ST 开头,代表测试网络和模拟网络。
在 Clarity 中,文字主体用户值以单引号 (') 为前缀。请注意,没有结束单引号。
'ST1HTBVD3JG9C05J7HBJTHGR0GGW7KXW28M5JS8QE
合约主体用户是部署合约的标准主体用户和合约程序名称的复合体,由点分隔:
'ST1HTBVD3JG9C05J7HBJTHGR0GGW7KXW28M5JS8QE.my-awesome-contract
在编写 Clarity 时,您将经常使用主体用户类型。它用于检查谁在调用合约程序、记录有关不同主体用户的信息、跨合约的函数调用等等。
要检索主体用户的当前 STX 余额,我们可以将其传递给 stx-get-balance 函数。
(stx-get-balance 'ST1HTBVD3JG9C05J7HBJTHGR0GGW7KXW28M5JS8QE)
两种主体用户都可以持有代币,因此我们也可以检查合约的余额。
(stx-get-balance 'ST1HTBVD3JG9C05J7HBJTHGR0GGW7KXW28M5JS8QE.my-contract)
零余额有点无聊,所以让我们发送一些 STX 给一个主体用户:
(stx-transfer? u500 tx-sender 'ST1HTBVD3JG9C05J7HBJTHGR0GGW7KXW28M5JS8QE)
请正确理解原始类型,以及不同类型永远不能混合的事实,现在,你就会很明白为什么上一节中的示例不起作用。由于第一个数字是一个有符号整数,而下一个数字是一个无符号整数——注意 u——分析器将代码视为无效而拒绝。我们应该为它提供两个有符号或两个无符号整数。
不正确示例:
(+ 2 u3)
正确示例:
(+ u2 u3)