평생 주석이있는 구조체를 내보내는 라이브러리가 있습니다. 이제 다른 프로그램에서이 프로그램을 사용하려고했지만, 이제 평생 주석을 사용해야 할 것 같습니다. 기본적으로 나는이 일을 해요 :평생 주석 또는 & str vs String
Bar
이
Foo
을 위해 평생을 정의해야한다고
// in my lib
struct Foo<'a> {
baz: &'a str
}
// another program
struct Bar {
foo: Foo
}
:
<anon>:6:10: 6:13 error: wrong number of lifetime parameters: expected 1, found 0 [E0107]
<anon>:6 foo: Foo
^~~
이 해결하기 쉽습니다 :
struct Bar<'a> {
foo: Foo<'a>
}
을하지만이 지금을 의미 Bar
등을 사용하는 모든 기기의 수명을 정의해야합니다. 그리고 이것이 사실이라면 명시 적 수명이 필요하지 않은 유형을 사용하는 것 외에는이를 해결할 수있는 방법이 있습니까? 또는 String
과 같은 소유 유형을 사용하는 것이 더 낫지 않습니까?
배경이 약간이지만, 인수로 필요한 함수를 호출해야했기 때문에 &str
을 사용했습니다. 그들을 변환하는 동안 아무 문제가, 실제로는 Vec<(&str, &str)>
, 그래서 내 생각은 처음부터 올바른 유형을 사용하여 전환을 제거하는 것이었다. 나는 잘못된 결정이라는 느낌을 가지고 있지만, 내가 아는 것은 무엇입니까? :)
녹에는 "저렴한"전환이 있습니다. 관습에 따라 'as_'로 시작하는 메소드 이름으로 표시됩니다. 예를 들어'String :: as_slice'는'string '을 빌려 오는'& str'을 생성합니다. –