Rust 有可能通过渠道使用任何特质吗?
这个例子并不正确,但它给出了我所期望的:Rust 有可能通过渠道使用任何特质吗?,rust,Rust,这个例子并不正确,但它给出了我所期望的: fn main() { let (chan, port) = channel(); load(chan); let r = port.recv().unwrap().unwrap(); println!("{}", r.downcast_ref::<String>().unwrap()); } pub fn load<T:Send + Any>(sender: Sender<Option
fn main() {
let (chan, port) = channel();
load(chan);
let r = port.recv().unwrap().unwrap();
println!("{}", r.downcast_ref::<String>().unwrap());
}
pub fn load<T:Send + Any>(sender: Sender<Option<T>>) {
// do some works
sender.send(Some(String::new("test") as Any);
}
我不确定,但Servo使用Serde的
反序列化
/序列化
特征有类似的功能。是的,可以通过通道发送任何
特征的装箱特征对象:
use std::sync::mpsc::{channel, Sender};
use std::any::Any;
fn main() {
let (chan, port) = channel();
load(chan);
let r = port.recv().expect("Unable to receive");
println!("{}", r.downcast_ref::<String>().expect("Not a string"));
}
pub fn load(sender: Sender<Box<Any>>) {
let s = String::from("test");
let s = Box::new(s) as Box<Any>;
sender.send(s).expect("Unable to send");
}
这没有意义,因为
String::new
不接受任何参数。此外,您不能将值转换为特征-特征没有已知的大小。它们总是需要在某种指针后面。是的,可以通过通道发送任何特征的装箱特征对象:
use std::sync::mpsc::{channel, Sender};
use std::any::Any;
fn main() {
let (chan, port) = channel();
load(chan);
let r = port.recv().expect("Unable to receive");
println!("{}", r.downcast_ref::<String>().expect("Not a string"));
}
pub fn load(sender: Sender<Box<Any>>) {
let s = String::from("test");
let s = Box::new(s) as Box<Any>;
sender.send(s).expect("Unable to send");
}
这没有意义,因为String::new
不接受任何参数。此外,您不能将值转换为特征-特征没有已知的大小。它们总是需要位于某种指针后面。请查看如何创建指针。在问题中,您应该能够提供产生所接收错误的示例代码。没有这些,我们无法理解你的问题是什么。现在,您的示例代码甚至在语法上都是无效的,但我肯定您不想知道如何正确地关闭括号尝试在其中一个中编译它应有助于创建MCVE。请查看如何创建MCVE。在问题中,您应该能够提供产生所接收错误的示例代码。没有这些,我们无法理解你的问题是什么。现在,您的示例代码甚至在语法上都是无效的,但我肯定您不想知道如何正确地关闭括号尝试在其中一个中编译它应该可以帮助您创建MCVE。非常感谢您的提示和帮助;)。我很想提供一个最小的/完整的/可验证的例子,但我的“例子”在我的头脑中是纯粹的科幻小说。非常感谢你的提示和帮助;)。我本想提供一个最小的/完整的/可验证的例子,但我的“例子”在我的头脑中纯粹是科幻小说。
String::new("test") as Any