녹에 다음 코드가 있습니다. 지역 변수에 대한 참조를 반환하지 않아도된다는 것을 알고 있으며,이 경우에는 그렇지 않습니다. 분할 할 문자열은 &str
참조로 전달되며 분할 경계를 결정한 후 &s[0..idx]
을 반환합니다. 여기서 idx
은 경계의 끝입니다. 나는 이것이 "dangling"참조 관련 오류를 발생시키지 않을 것이라고 확신했다. 그러나 그것은 내가 틀렸다는 것이 드러났습니다! 모든 설명이 크게 감사합니다누락 된 수명 연산자
error[E0106]: missing lifetime specifier
--> src/main.rs:7:37
|
7 | fn str_split(s: &str, pat: &str) -> &str {
| ^expected lifetime parameter
|
= help: this function's return type contains a borrowed value, but the signature does not say whether it is borrowed from `s` or `pat`
:
fn demo4() {
let mut s = String::from("Elijah Wood");
let firstname = str_split(&s, &String::from(" "));
println!("First name of actor: {}", firstname);
}
// can handle both &str and &String
fn str_split(s: &str, pat: &str) -> &str {
let bytes = s.as_bytes();
let b_pat = pat.as_bytes();
for (i, &item) in bytes.iter().enumerate() {
if item == b_pat {
return &s[0..i];
}
}
&s[..]
}
fn main() {
demo4();
}
나는 다음과 같은 오류를 얻고있다.
@trentcl 스냅 샷이 당신을 괴롭히는 경우 사과드립니다. 그때는 가장 좋은 생각 같았습니다 –
오류 메시지는 잠재적 인 응답자뿐만 아니라 미래의 질문자에게도 똑같은 질문을하는 텍스트로 사용하는 것이 좋습니다. 별로 중요하지 않습니다. – trentcl
@trentcl 귀하의 요지가 있습니다. 모든 포인터 왜 컴파일러 오류에 관한? –