以下的C#代码能够翻译成Rust吗?
我希望您能创建一个通用的动态类型,以允许创建包含动态值的数组。例如:
dynamic x = 109;
x = "Hi";
我希望您能创建一个通用的动态类型,以允许创建包含动态值的数组。例如:
var l = new dynamic[2];
l[0] = 102;
l[1] = "Hi";
一种选择是使用Any
的向量(链接到beta,因为稳定文档没有显示定义为Any
的方法,但它们是稳定的):
use std::any::Any;
fn main() {
let mut v: Vec<Box<Any>> = vec![];
v.push(Box::new(102usize));
v.push(Box::new("Hi"));
for item in &v {
// to do an operation, it is necessary to downcast to
// a concrete type
if let Some(x) = item.downcast_ref::<usize>() {
println!("num = {:?}", x)
}
}
}
dynamic
,因为您不能只调用任意方法。 - Shepmaster不能直接这样做。你可以创建一个新的绑定来代替x
:
fn main() {
let x = 109;
let x = "Hi";
}
根据您的用例,您可能可以使用通过特质限定泛型或特质对象来实现类似的目标:
use std::fmt::Display;
fn main() {
let mut x: Box<Display> = Box::new(109);
x = Box::new("Hi");
}
但是这对特质对象并不适用;特质对象只能用于特质中的明确方法。在我写的代码中,我没有发现这是一个重大障碍。通常情况下,我想调用的方法数量是固定的,因此可以将它们映射到特质中。在其他情况下,我可以提供一个泛型类型,以允许用户指定适合他们情况的类型。在编译时,被声明为动态类型的元素预设支持任何操作。
int
或string
)? - Lee