2015-06-21 2 views
1

Кажется, я не могу назвать метод теми же структуры в ржавчине или, может быть, я не понимаю, что-то:Вызов осущий метод из другого метода осущий

struct St1 { 
    aa: String 
} 

impl St1 { 
    pub fn method1() -> String { 
    //.... 
    method2() //error: unresolved name method2 
    } 

    pub fn method2() -> String { 
    //.... 
    } 
} 

Каково это, как это должно быть?

ответ

3

Вам необходимо полностью квалифицировать метод, который вы вызываете.

struct St1 { 
    aa: String 
} 

impl St1 { 
    pub fn method1() -> String { 
     St1::method2() 
    } 

    pub fn method2() -> String { 
     unimplemented!() 
    } 
} 

На случай, если вы имеете в виду для этих методов, чтобы быть методами экземпляра, то вы все равно должны полностью квалифицировать их, но с использованием вместо self:

struct St1 { 
    aa: String 
} 

impl St1 { 
    pub fn method1(&self) -> String { 
     self.method2() 
    } 

    pub fn method2(&self) -> String { 
     unimplemented!() 
    } 
} 

Обратите внимание, что Руст стиль 4- пространственные отступы.

+0

1) как я могу получить доступ к 'aa'? 2) Рекомендуемый стиль использования Impl или лучше использовать «чистые» функции без их упаковки в Impl? –

+3

@jawanam (1) - еще один вопрос и его следует задать отдельно. Это также распространяется на [* Язык программирования ржавчины *] (http://doc.rust-lang.org/book/), который вы обязательно должны ** читать. (2) «это зависит». Является ли ваша функция высоко связанной с структурой? Если это так, я буду использовать 'impl'. – Shepmaster

+0

В частности [Синтаксис метода] (http://doc.rust-lang.org/book/method-syntax.html). – Shepmaster

Смежные вопросы