간단한 구조체를 사용하여 Index
을 구현하고 싶지만 Rust의 신입 사원으로는 차용 검사기에 많은 문제가 있습니다. usize
에 의해 색인 때 내 구조체 나는 그것이 시작 단계 값을 저장해야하고 싶습니다, 아주 간단합니다, 그것은 start + idx * step
를 반환해야합니다 :참조가 아닌 값을 반환하는 인덱스 특성 구현
pub struct MyStruct {
pub start: f64,
pub step: f64,
}
내 직감은 단순히 가지고 갈 수있을 것이다 내 유형의 Index
의 서명과 플러그 :
impl Index<usize> for MyStruct {
type Output = f64;
fn index(&self, idx: usize) -> &f64 {
self.start + (idx as f64) * self.step
}
}
이 expected type &f64, found type f64
말하는 오류 mismatched types
을 제공합니다. 완전히 녹의 타입 시스템이 어떻게 작동하는지 이해하는 것이 아직 누군가가 단순히 발현에 &
두드림 시도로 :
fn index(&self, idx: usize) -> &f64 {
&(self.start + (idx as f64) * self.step)
}
이 이제 borrowed value does not live long enough
, 그래서 어쩌면 평생 변수를 필요 하더군요?
fn index<'a>(&self, idx: usize) -> &'a f64 {
&(self.start + (idx as f64) * self.step)
}
오류는 동일하지만 노트는 지금 lifetime 'a
대신 lifetime #1
제공, 그래서 나는 그 필요는 없습니다 생각,하지만 난 붙어있어 같은이 시점에서 나는 생각합니다. 나는 대부분의 언어에 대한 간단한 연습이 Rust에서 구현하기가 너무 어렵다는 것을 혼란스럽게 생각한다. 왜냐하면 내가하고 싶은 것은 참조 뒤에있는 함수에서 계산을 반환하기 때문이다. 값이 수요에 따라 계산되는 간단한 구조에 대해 Index
을 구현하려면 어떻게해야합니까?
MyStruct에서'us'를 가져 와서'f64'를 반환하는'index' 또는'at' 메소드를 구현하는 것이 더 낫겠습니까? 또한 Python 슬라이스에 상응하는 색인 생성 기능을 구현하고 싶습니다 ('Range'는 녹이 생각합니다).'... '구문을 함수 인수로 사용할 수 있습니까? – bheklilr
독립 실행 형'index' 메소드를 작성할 수는 있지만 인덱스 구문 ('x [i]')과 함께 사용할 수는 없습니다. 범위 구문은 표준 라이브러리가 제공하는 유형의 값을 생성합니다 (예 :'x..y'는 ['Range']를 생성합니다 (https://doc.rust-lang.org/stable/std/ops/struct.Range.html) 값). –
그래서 근본적으로 나는 단지 여기에서 운이 없다? 오, 그렇다고 새로운 언어를 배우는 것은 다른 패러다임이 아닙니다. – bheklilr