3,882
社区成员




interface Greet {
public void say();
}
class Student implements Greet {
public String name;
public void say() {
System.out.println("student");
}
}
class Teacher implements Greet {
public String classz;
public void say() {
System.out.println("teacher");
}
}
List<Greet> dp = new ArrayList();
dp.add(new Student());
dp.add(new Teacher());
Teacher d = (Teacher)dp.get(1);
let tests = vec![
Tests::new("x"),
Tests::new("y"),
Tests::new("foobar"),
];
for (i,v) in tests.iter().enumerate() {
let tmp:& Box<dyn ast::Node> = &program.statements[i];
let b: &ast::LetStatement = match tmp.as_any().downcast_ref::<ast::LetStatement>() {//类似接口断言...
Some(b) =>b,
None =>panic!("&Node is not a let statement"),
};
test_let_statment_helper(b,&v.expectedIdentifier);
}
//结构体定义
use std::any::Any;
pub trait Node: std::fmt::Debug {
fn token_literal(&self) -> String;
fn as_any(&self) -> &dyn Any;
}
impl Node for Program {
fn token_literal(&self) ->String {
if self.statements.len()>0 {
return self.statements[0].token_literal();
}
"".to_string()
}
fn as_any(&self)->&dyn Any{
self
}
}