티스토리 뷰

배열의 크기가 2 이상일때만 배열을 어떻게 zip으로 만지작한 뒤에 나중에도 계속 컬렉션 취급을 하고싶었음.
근데 그 이외의 경우엔 empty() 취급해야 하잖아요? 그냥은 될 리가 없지

컴파일 안 되는 코드

처음에 짠 코드가 컴파일이 안 되니까 어떻게 해결해보겠다고 (성능?은 살짝 아쉽지만) 타입 어노테이션을 추가해본건데...

될 리가 없지. 이게 함수였고 반환받은 게 borrow였으면 말이 됐을지도 모름.

물론 정적으로 컴파일하는 언어인 만큼 아무리 lazy 라도 Zip 이랑 Empty 는 타입이 다르고, 하나로 퉁쳐서 쓸 수 없음

dyn Iterator 로 trait object 취급하는 건 말이 안 되는 짓이었는데, 이유는 이게 레퍼런스가 아니기 때문. 그렇다고 둘 다 &mut 을 추가하면

stackoverflow.com/a/29760740/4394750

☆ 축 드랍 ☆
지역변수 zipped 님께서 퇴장하셨습니다.

결국 나는 collect() 하고 Option 으로 감싸는 방식으로 해결했는데, 찾아보니 Option 도 IntoIterator trait을 구현하기 때문에 가능한 짓.

stackoverflow.com/questions/40907897/iterator-on-optionvec

근데 말이죠

exercism.io/tracks/rust/exercises/proverb/solutions/c2e813a224414b7894efbf82f4bc03ec

풀이 제출하고 나서 다른 사람 풀이를 봤는데,
아예 이럴 필요가 없이 skip(1) take(1) 같은 거 쓰면 알아서 Option 이라 이런 뻘짓을 할 필요가 없었던 겁니다.

pub fn build_proverb(list: &[&str]) -> String {
    list.iter()
        .zip(list.iter().skip(1))
        .map(|(normal, offset)| format!("For want of a {} the {} was lost.", normal, offset))
        .chain(
            list.iter()
                .take(1)
                .map(|v| format!("And all for the want of a {}.", v)),
        )
        .collect::<Vec<_>>()
        .join("\n")
}

exercism.io/tracks/rust/exercises/proverb/solutions/5b7c3a45c2e849418b8f40437ea06440

허허허허허허...

여기서 유의해서 볼 점은 zip에 skip(1) 을 한 걸 넣고 있다는 건데, 이게 제대로 돌아간다는 의미는 zip은 배열 a, b 중 짧은 놈 길이에 맞춰서 조립한다는 뜻. 문서 보면 그렇게 나오겠죠 머 안 읽어봤지만

근데 저 Vec<_> 는 왜 넣은

---

재밌었습니다. 오늘은 꽤나 많은 시간을 소요했네요

최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함