Я снова сражаюсь с жизнями. Или на самом деле, я как бы выиграл бой, но я не уверен, что результат - это намеченный способ справиться с этим.Есть ли способ опустить жизни для этой черты здесь?
Скажем, у меня есть структура с двумя сроками службы: Inner<'a, 'b>
. Теперь я хочу написать черту, которая определяет метод new(inner: &Inner) -> Self
. Разработчик должен иметь возможность свободно хранить ссылку на Inner
и определять другие методы работы с ней.
Я пришел с этим (это работает!), Но у меня есть несколько вопросов
struct Inner<'a, 'b>{
foo: &'a str,
bar: &'b str
}
trait Worker<'data, 'a, 'b> {
fn new (inner: &'data Inner<'a, 'b>) -> Self;
fn work_with_inner() { println!("works on inner");}
}
struct SomeWorker<'inner, 'a:'inner, 'b:'inner> {
inner: &'inner Inner<'a, 'b>
}
impl<'data, 'a, 'b> Worker<'data, 'a, 'b> for SomeWorker<'data, 'a, 'b> {
fn new (inner: &'data Inner<'a, 'b>) -> Self {
SomeWorker {
inner: inner
}
}
}
fn main() {
}
манежике: http://is.gd/A3ol4w
с точки зрения жизни, это может быть упрощено? В частности, мне было интересно, действительно ли эта характеристика должна определять все эти времена жизни или если есть способ определить их только в структуре?
Если нет возможности пропустить время жизни в этом признаке, это означает, что лучше всего указать все возможные сроки жизни на черту, чтобы иметь максимальную гибкость для исполнителя? Я имею в виду, что если структура
SomeWorker
не захочет хранить ссылку наInner
, все это, включая черту, может быть намного проще.
Увидеть, нет жизни вообще.
struct Inner<'a, 'b>{
foo: &'a str,
bar: &'b str
}
trait Worker {
fn new (inner: &Inner) -> Self;
fn work_with_inner() { println!("works on inner");}
}
struct SomeWorker;
impl Worker for SomeWorker {
fn new (inner: &Inner) -> Self {
SomeWorker
}
}
fn main() {
}
Playpen: http://is.gd/NzigjX
Вот почему я спрашиваю себя, если в качестве признака автора следует считать, что все методы, которые принимают ссылки могут в конечном итоге хранится на поле с помощью признака реализатора и, следовательно, Мне нужно указать все жизненные моменты на этом признаке, чтобы сделать это возможным для разработчиков.
Отличный ответ, как обычно! Отсутствующий '& self' был неаккуратным мной с примером. Это как-то привело меня к другому вопросу haha http://stackoverflow.com/questions/34374149/what-type-annotations-does-rust-want-for-this-ufcs-call – Christoph