Appearance
字符串和字符串构建器
字符串是不可变的字符序列,这意味着一旦创建了一个 String
,它就不能被更改。字符串用于存储文本,因此可以转换为 Cell
类型以用作消息体。
为了以节省 gas 的方式连接字符串,请使用 StringBuilder
。
beginString
solidity
fun beginString(): StringBuilder;
创建并返回一个空的 StringBuilder
。
使用示例:
solidity
let fizz: StringBuilder = beginString();
beginComment
solidity
fun beginComment(): StringBuilder;
创建并返回一个空的 StringBuilder
用于构建注释字符串,该字符串会在结果 String
前面加上四个空字节。此格式用于将文本注释作为消息体传递。
使用示例:
solidity
let fizz: StringBuilder = beginComment();
beginTailString
solidity
fun beginTailString(): StringBuilder;
创建并返回一个空的 StringBuilder
用于构建尾字符串,该字符串会在结果 String
前面加上一个空字节。此格式用于各种标准如 NFT 或 Jetton。
使用示例:
solidity
let fizz: StringBuilder = beginTailString();
beginStringFromBuilder
solidity
fun beginStringFromBuilder(b: StringBuilder): StringBuilder;
从现有的 StringBuilder
b
创建并返回一个新的 StringBuilder
。当需要将现有的 String
序列化为带有其他数据的 Cell
时非常有用。
使用示例:
solidity
let fizz: StringBuilder = beginStringFromBuilder(beginString());
StringBuilder.append
solidity
extends mutates fun append(self: StringBuilder, s: String);
StringBuilder
的扩展变异函数。
将 String
s
附加到 StringBuilder
。
使用示例:
solidity
let fizz: StringBuilder = beginString();
fizz.append("oh");
fizz.append("my");
fizz.append("Tact!");
StringBuilder.concat
solidity
extends fun concat(self: StringBuilder, s: String): StringBuilder;
StringBuilder
的扩展函数。
在与 String
s
连接后返回一个新的 StringBuilder
。可以链式调用,与 StringBuilder.append()
不同。
使用示例:
solidity
let fizz: StringBuilder = beginString()
.concat("oh")
.concat("my")
.concat("Tact!");
StringBuilder.toString
solidity
extends fun toString(self: StringBuilder): String;
StringBuilder
的扩展函数。
从 StringBuilder
返回一个构建的 String
。
使用示例:
solidity
let fizz: StringBuilder = beginString();
let buzz: String = fizz.toString();
StringBuilder.toCell
solidity
extends fun toCell(self: StringBuilder): Cell;
StringBuilder
的扩展函数。
从 StringBuilder
返回一个组装的 Cell
。
使用示例:
solidity
let fizz: StringBuilder = beginString();
let buzz: Cell = fizz.toCell();
StringBuilder.toSlice
solidity
extends fun toSlice(self: StringBuilder): Slice;
StringBuilder
的扩展函数。
从 StringBuilder
返回一个组装的 Cell
作为 Slice
。别名为 self.toCell().asSlice()
。
使用示例:
solidity
let s: StringBuilder = beginString();
let fizz: Slice = s.toSlice();
let buzz: Slice = s.toCell().asSlice();
fizz == buzz; // true
String.asSlice
solidity
extends fun asSlice(self: String): Slice;
String
的扩展函数。
通过尝试将所有位打包到一个连续的 Cells 列表中来从 String
返回一个 Slice
,每个单元格引用下一个单元格,并打开它们以供将来解析。
注意,Slice
中没有指示特定字符可以占用多少字节或引用列表的深度,因此仅在你清楚自己在做什么时使用此函数。
使用示例:
solidity
let s: String = "It's alive! It's alive!!!";
let fizz: Slice = s.asSlice();
let buzz: Slice = s.asSlice().asString().asSlice();
fizz == buzz; // true, 但要小心,因为并不总是如此
查看
String.asSlice
函数在实践中的使用方法:如何将String
转换为Int
。
String.asComment
solidity
extends fun asComment(self: String): Cell;
String
的扩展函数。
通过在 String
前面加上四个空字节从 String
返回一个 Cell
。此格式用于将文本注释作为消息体传递。
使用示例:
solidity
let s: String = "When life gives you lemons, call them 'yellow oranges' and sell them for double the price.";
let fizz: Cell = s.asComment();
let b: StringBuilder = beginComment();
b.append(s);
let buzz: Cell = b.toCell();
fizz == buzz; // true
String.fromBase64
solidity
extends fun fromBase64(self: String): Slice;
String
的扩展函数。
从解码的 Base64 String
返回一个 Slice
。别名为 self.asSlice().fromBase64()
。
注意,此函数有限制,只从给定的 String
中获取前 $1023$ 位数据,当 String
较大(即包含超过 $1023$ 位数据)时不会抛出异常。
使用示例:
solidity
let s: String = "SGVyZSdzIEpvaG5ueSE=";
let fizz: Slice = s.fromBase64();
let buzz: Slice = s.asSlice().fromBase64();
fizz == buzz; // true
Slice.asString
solidity
extends fun asString(self: Slice): String;
Slice
的扩展函数。
通过尝试加载所有位而不查看其引用(如果有)从 Slice
返回一个 String
。
注意,此函数完全不查看引用,并将其输出截断为 $1023$ 位,因此仅在你清楚自己在做什么时使用它。
使用示例:
solidity
let s: String = "Keep your Slices close, but your Strings closer.";
let fizz: String = s;
let buzz: String = s.asSlice().asString();
fizz == buzz; // true, 但要小心,因为并不总是如此
Slice.fromBase64
solidity
extends fun fromBase64(self: Slice): Slice;
Slice
的扩展函数。
从解码的 Base64 Slice
返回一个新的 Slice
。
注意,此函数有限制,只从给定的 Slice
中获取前 $1023$ 位数据,当 Slice
有更多数据(即有任何引用)时不会抛出异常。
使用示例:
solidity
let s: Slice = "SSBhbSBHcm9vdC4=".asSlice();
let fizz: Slice = s.fromBase64();
Int.toString
solidity
extends fun toString(self: Int): String;
Int
的扩展函数。
使用示例:
solidity
let fizz: String = (84 - 42).toString();
Int.toFloatString
solidity
extends fun toFloatString(self: Int, digits: Int): String;
Int
的扩展函数。
使用定点表示法从 Int
值返回一个 String
,其中 self
是数字的有效部分,digits
是小数部分的位数。
更准确地说,digits
是 $10^{-\mathrm{digits}}$ 表达式的指数参数,当乘以实际的 Int
值时,给出表示的小数。参数 digits
必须在半闭区间:$0 <=$ digits
$< 78$,否则会抛出异常,错误代码为 exit code 134:无效参数
。
使用示例:
solidity
let fizz: String = (42).toFloatString(9); // "0.000000042"
Int.toCoinsString
solidity
extends fun toCoinsString(self: Int): String;
Int
的扩展函数。
使用定点表示法从 Int
值返回一个 String
。别名为 self.toFloatString(9)
。
这用于表示 nanoToncoin Int
值。
使用示例:
solidity
let nanotons: Int = 42;
let fizz: String = nanotons.toCoinsString();
let buzz: String = nanotons.toFloatString(9);
fizz == buzz; // true, 都存储 "0.000000042"
Address.toString
solidity
extends fun toString(self: Address): String;
Address
的扩展函数。
从 Address
返回一个 [String
]。
使用示例:
solidity
let community: Address = address("UQDpXLZKrkHsOuE_C1aS69C697wE568vTnqSeRfBXZfvmVOo");
let fizz: String = community.toString();