2015-01-16 5 views
5

녹을 가지고 노는 것으로, 나는 어떤 코드를 한 클래스에 추출하고있다. 독립적 인 기능을 유지하기 위해 콜백 함수에 매달려 나중에 호출하려고합니다. 그하게멤버 변수를 통해 함수를 호출하려면 어떻게해야합니까?

...path.../src/toy.rs:7:14: 7:19 error: type `&mut toy::Toy` does not implement any method in scope named `go` 
...path.../src/toy.rs:7   self.go(n) 

아마도, 특수 구문 (또는 완전히 다른 구조)있다 ...

pub struct Toy { 
    go: fn(count: i16) -> String, 
} 

impl Toy { 
    fn lets_go(&mut self, n: i16) -> String { 
     self.go(n) 
    } 
} 

건물의 날을 제공합니다 : 명백한 fn new() 건너 뛰는 포함, 간단하게하기 위해, 우리는 같은 것을 가지고 감각은 self.go() 콜이지만, 모든 문서에서 유사한 상황에 대한 예제 나 설명을 볼 수 없으므로 어느 방향 으로든 이해할 수 있습니다.

분명히, .go이 functor 류의 클래스 일 수 있지만 녹이 매우 관용적이지는 않습니다.

답변

7

foo.bar(...)은 항상 메서드 호출로 구문 분석되며 절대로 필드를 찾지 않습니다. 이것은 특히 형질에 대한 애매함을 피한다. 하나는 통화 및 예를 들어 두 가지 표현으로 필드 액세스를 분리하여 필드 액세스 할

let f = self.go; 
f(n) 

또는 더 나은, 단지 (self.go)(n)을 강제 할 수 있습니다.

문제 #2392은 이러한 진단 기능 개선에 대해 설명합니다.

+0

우수. 나는 괄호 안에 넣는 것이 도움이 될 것이라고 추측 했어야하지만 결코 가질 수 없었습니다. 감사! –

관련 문제