trait Monster {
fn attack(&self);
fn new(int) -> Self;
}
struct CookiesMonster {
cookies: int,
hungry_level: int,
}
impl Monster for CookiesMonster {
fn new(i: int) -> CookiesMonster {
CookiesMonster { cookies: i, hungry_level: i + 1 }
}
fn attack(&self) {
println!("I have {:d} cookies!!", self.cookies)
}
}
struct Dummy {
count: int
}
impl Dummy {
fn new(i: int) -> Dummy {
Dummy { count: i }
}
}
지금,이 작품 :
let monster: CookiesMonster = Monster::new(10);
let dummy = Dummy::new(10);
그러나 이것은하지 않습니다 :
let monster = CookiesMonster::new(10);
왜 못해 CookiesMonster 형식에서 직접 새 메서드를 호출합니까?
내 답변에이 문제를 언급 한 것으로 간주했지만, 일단 "self"에 대한 메서드를 고려하기 시작하면이 "feature"가 사라집니다. 둘 다'frob (& self)'를 정의하는 두 가지 (범위 내) 특성을 가지고 있다면'obj.frob()'는 분리 된 형질에서 왔음에도 모호합니다. 그래서 나는 이것이 정말로 중요하다는 것을 확신하지 못합니다. –
CookiesMonster :: new가 왜 모호한 지 이해할 수 없습니다. 그것이 나에게 무엇이 할 것인지 꽤 명확하게 보인다. 편집 : 알았어, 이제 더 이해가 되네. –
@KevinBallard 사실,이 경우 컴파일러는 "오류 : 여러 적용 가능한 메소드"라고 말합니다. 다음은 예입니다 https://gist.github.com/nata79/8372600 –