如何解决如果所有类型T都强制为U,那么将所有类型T强制为U,然后将&T强制强制为U
[T; n]
可以强迫[T]
到fn test(){
let _a: &[i32] = &[1,2,3];
}
。以下代码也是well documented:
&[T; n]
在这里,我们将&[T]
强制转换为T
。
对于所有类型U
,T
是否确实将U
强制为&T
,然后将&U
强制为rep_aov= pg.mixed_anova(dv='Att',between='Genotype',within=['Day','Cue'],subject='Subject',data=sg100)
是真的吗?
参考文献中没有对此进行记录(至少是明确记录)。
解决方法
否,因为再增加一层&
会导致失败:
fn oops() {
let a: &[i32; 3] = &[1,2,3];
let _b: &&[i32] = &a;
}
error[E0308]: mismatched types
--> src/lib.rs:8:23
|
8 | let _b: &&[i32] = &a;
| ------- ^^ expected slice `[i32]`,found array `[i32; 3]`
| |
| expected due to this
|
= note: expected reference `&&[i32]`
found reference `&&[i32; 3]`
此外,并非[T; n]
强迫 [T]
,而&[T; n]
强迫 { {1}}。您链接的文档描述了与强制大小有关的两个特征:&[T]
和Unsize
。 CoerceUnsized
实现[T; n]
,而因此 Unsize<[T]>
实现&[T; n]
;这本质上是同一件事,并且您的代码有效地展示了两者。无法使用引用(或某种指针)编写将CoerceUnsized<&[T]>
强制为[T; n]
的函数,因为取消大小写强制仅发生在某种指针之后
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。