我想围绕现有类型/结构创建一个Wrapper。根据Newtype模式,根据Rust Book ch 19,“在Wrapper上实现Deref trait以返回内部类型将访问所有底层方法”:
https://doc.rust-lang.org/book/ch19-03-advanced-traits.html
这是我在字符串包装器上的实现。一个简化示例:
struct Wrapper(String);
impl Deref for Wrapper {
type Target = String;
fn deref(&self) -> &Self::Target {
&self.0 //pointer to Inner value
}
}
但是,调用消耗self的方法会引发错误:
fn main() {
let d = "Dog".to_string();
let w = Wrapper(d);
w.into_bytes();
}
错误:无法从Wrapper
的取消引用中移动,因为value的类型为std::string::String
,它没有实现Copy
特性
因此我有两个问题:
我的实现出了什么问题,如何使其工作?
String::into_bytes
移动字符串
,在您的情况下,您只能访问它的引用
您可以使用
字节
,它将迭代器返回到字节,而不移动它:
fn main() {
let d = "Dog".to_string();
let w = Wrapper(d);
let b = w.bytes();
println!("{b:?}");
}
我想让它与self正常工作,
一般来说,您需要考虑签名:
< li>Deref
-
使用
从/Into
的示例:
struct Wrapper(String);
impl From<Wrapper> for String {
fn from(w: Wrapper) -> String {
w.0
}
}
fn main() {
let d = "Dog".to_string();
let w = Wrapper(d);
let s: String = w.into();
let bytes = s.into_bytes();
println!("{bytes:?}");
}
游戏场
您还可以考虑查看
std::borrow
模块,该模块具有允许您将类型用作其他类型的特征。
最后,您的方法可能有效,但如前所述,您不能从
use std::ops::Deref;
struct Wrapper(String);
impl Deref for Wrapper {
type Target = String;
fn deref(&self) -> &Self::Target {
&self.0 //pointer to Inner value
}
}
fn main() {
let d = "Dog".to_string();
let w = Wrapper(d);
let b = w.deref().clone().into_bytes();
println!("{b:?}");
}
游戏场
我有一个页面显示了单个测试用例的详细信息。出于某种原因,我无法跳过这个错误,甚至无法发送。这是我的控制器: 以下是错误: 在视野中。php第180行位于HandleExceptions-
我试图设置一个项目与Karaf 4.0.4 HiberNate 4.3.6。最终,我使用MariaDB 10.0.23作为数据库。 我遵循并尝试了本教程,但: 而不是使用数据源blueprint.xml我想使用pax-jdbc-config来创建一个数据源(因为数据源蓝图不建议使用)。 而不是MySQL,我必须使用MariaDB。所以我假设我必须更改一些配置文件来使用MariaDB驱动程序 因此,
问题内容: 对于Java的最终结业,我们在测试中包含“异常”部分,其中包括try,catch和finally调用。当我尝试将示例代码放入Eclipse时,遇到了错误并抛出了新的领域。所有错误都显示“无法解析键入”。 如何解决此问题,以便可以学习/查看代码应该执行的操作? Q4类 Q4Exception类 问题答案: 我认为值得一提的是,在Eclipse中,Ctrl + Shif + O可以为您解决
我收到错误: 错误类型错误: 无法读取在评估 (webpack-internal:///./node_modules/@angular/common/esm5/http.js:163) 处未定义的属性 “长度”在 Array.forEach () 在 httpHeaders.lazyInit (webpack-internal:///./node_modules/@angular/common/e
问题内容: 我有一个让我感到困惑的奇怪问题。我有一个模型: 变体条目如下所示: 我需要添加一个新字段-说“颜色”。所以我这样做是为了批量更新: 但是,“颜色”字段未设置-如果我再次浏览并注释掉该行,则它不会显示。我似乎无法弄清楚为什么要这样做。我有一个onSave事件,该事件已正确触发,因此可以保存。我也没有对版本结构进行任何检查- 即没有代码只允许代码和价格。我显然缺少了一些东西,但几个小时后我
问题内容: 当我启动android studio时,出现以下错误: 我使用最新的Android Studio和Latest(1.6)Gradle。这是什么问题?我使用32位窗口8 问题答案: 重要提示:我是在新的Android Studio上完成的!如果您有插件,那么它可能不适合您! 我找到了适合我的解决方案: 去摇篮 下载最新版本 在Android Studio中打开Grandle的位置(在我的