rust - 尝试在 Rust 中打印字符串内容时编译时的大小未知
问题描述
我有几段代码,一旦出错,另一段没有,我不明白为什么。
编译时出错的那个:
fn main() {
let s1 = String::from("hello");
println!("{}", *s1);
}
这会抛出:在编译时没有已知的大小,就行println!("{}", *s1);
一个有效的:
fn main() {
let s1 = String::from("hello");
print_string(&s1);
}
fn print_string(s1: &String) {
println!("{}", *s1);
}
为什么会这样?访问字符串内容并打印它们的两种正确方法都不是吗?
解决方案
在第一个片段中,您要取消引用String
. str
这会产生一个动态大小的类型(在旧文本中有时称为未调整大小的类型)。DST 有点难以直接使用
在第二个片段中,您将取消引用 a &String
,这会产生一个 regular String
,它是一种正常大小的类型。
在这两种情况下,取消引用都是完全没用的,你为什么还要使用一个?
推荐阅读
- ajax - 在 JSF 中包含 cdata 块时,ajax 请求出现问题
- hyperledger-fabric - Hyperledger Fabric 多通道多链码
- hashicorp-vault - HashiCorp Vault 错误作为生产运行
- python-3.x - 在 Keras 中预测我的简单训练模型的问题
- python - 为什么 ThreadPoolExecutor 比 for 循环慢?
- python - 使用 Python 创建文件时保留初始 XML 注释
- wordpress - Google Analytics - 跟踪 URL 更改?
- regular-language - 我们如何使用抽水引理证明这种语言是不规则的?
- javascript - jquery未检测到Ajax输入值更改
- python - 如何在 python 中打印这样的板?