首先,trait 是动态分发吗?类型是在编译时单态化,还是运行时确定?
其次,为什么 trait 的实现,没有作用域,而是直接写函数?(我感觉很难分清楚给哪个 trait 实现了哪个 type)
再次,trait 可以给任意类型扩展函数吗?比如下述 Rust 代码:
trait A {...}
impl<T> A for T {...}
有等价的 moonbit 写法吗?
最后,我有一段 Rust 代码,是完全靠 trait 实现抽象的,可以翻译成 moonbit 吗:
struct Context;
trait Display<T> {
fn display(x: T) -> String;
}
impl Display<u8> for Context {
fn display(x: u8) -> String {
format!("u8:{}", x)
}
}
impl<T> Display<Vec<T>> for Context where Context: Display<T> {
fn display(xs: Vec<T>) -> String {
xs.into_iter().map(|x| Context::display(x) + ", ").collect()
}
}
fn main() {
println!("{}", Context::display(vec![1, 2, 3]));
}
这段 Rust 代码有等价的 moonbit 写法可以实现等价的抽象吗?