특성을 구현하는 구조체에 대한 일종의 기본 반복기를 구현하려고합니다. DataRow를 호출 내 특성은, 테이블 셀의 행을 나타내며, 다음과 같습니다녹에서 특성을위한 반복자 구현
pub trait DataRow<'a> {
// Gets a cell by index
fn getCell(&self, i: usize) -> &DataCell<'a>;
// Gets the number of cells in the row
fn getNumCells(&self) -> usize;
}
나는 셀 참조를 행을 반복하고 반환하는 두 가지 방법을 사용한다 제공 할 기본 반복자. 자바에서는 Iterable을 구현하는 추상 클래스 인 DataRow가 필요합니다.
impl<'a, T> IntoIterator for &'a T
where
T: DataRow<'a>
{
type Item = &'a DataCell<'a>;
type IntoIter = DataRowIterator<'a, T>;
fn into_iter(self) -> DataRowIterator<'a, T> {
return DataRowIterator::new(self);
}
}
을하지만 사람이 된 DataRow 특성 자신의 구현을 위해 자신의 반복자를 구현할 수 있기 때문에이 작동하지 않습니다 : 녹 나는 IntoIterator 먼저 시도했다. 자아의 크기는 컴파일에 알려져 있지 않기 때문에,
fn iter(&self) -> DataRowIterator<'a, Self> {
return DataRowIterator::new(self);
}
이, 그러나 중 하나가 작동하지 않습니다
내 두 번째 시도는 반복자를 생성하고 그것을 반환 특성,에 iter
방법을 추가했다 시각. DataRow는 임의의 수의 셀을 포함 할 수 있으므로이를 회피하기 위해 Sized
으로 표시 할 수 없습니다. 발생하는 오류에 대한 사항을 포함하여 내 데모 코드는 여기에 있습니다 :
https://play.rust-lang.org/?gist=dc128a133ffb5d7471d47d130520936d&version=stable
어떻게 사람이 사용자 지정 특성에 대한 이러한 "기본 반복자"를 구현하는 것이?
감사합니다. 당신이 신경 쓸 필요가 없다면 빠른 후속 질문 : 코드에서 주석으로 처리 된 루프에서 이제는'ref 셀을 위해 (& row로 & DataRow)'를 써야합니다. 이 모형 주위에 방법이 있을까요? – AlexanderF
"모든 사용자가 DataRow 특성을 자체적으로 구현하기 위해 자체 반복자를 구현할 수있다"고 했으므로 어떤 종류의 캐스트가 필요합니다. 헬퍼 함수'fn def_iter (p : & T) -> & DataRow {p}'를 만들면, 코드는'for_def_iter (& row)'의 셀을위한 것이다. BTW, 당신은'ref'를 필요로하지 않습니다. 셀은 이미 참조입니다. –
red75prime
그건 의미가 있습니다. 고맙습니다! – AlexanderF