2016-08-03 4 views
2

나는 내가 자신의 다음과 같은 this tutorial를 따라갈 정도로 Kotlin에 올라 타려고 노력하고있다. 예상 Int, 대신 IntProgression있어

그래서 그들은 이와 같은 문자열 주어진 시퀀스를 만들려고 : 비디오에 따르면,

"a vect" -> [ 
    a vect : 
    a vec : t 
    a ve : ct 
    ... 
] 

그리고 그것이 할 수있는 방법을, 다음

val seq = sequenceOf(canonicalisedInput.lastIndex + 1 downTo 0).map { 
    canonicalisedInput.substring(0, it) to canonicalisedInput.substring(it) 
} 

그리고 나는 내가하는 일을 (잘, 그것의 아이디어) 얻는다. 문제는 substringInt 두 개일 것으로 예상하는 반면 it (이는 downTo 진행에서 나온 일부 종류의 암시 적 반복자라고 가정)은 IntProgression입니다. 두 번째 substring 호출과 동일합니다.

무엇이 누락 되었습니까?

답변

4

게시 된 코드에 실수가 포함되어 있습니다 : sequenceOf(...) 단일 인수가 전달되면 해당 항목이있는 시퀀스, 즉 Sequence<IntProgression>이 반환됩니다.

(canonicalisedInput.lastIndex + 1 downTo 0).asSequence().map { ... } 

초라는 substring(...) 함수 the overload that returns the substring starting from the index passed as the argument이다 인덱스의 시퀀스 (Sequence<Int>)을 얻으려면, 대신 asSequence() 함수를 사용한다.

itimplicit name for the innermost lambda single parameter입니다. 귀하의 경우에는 map의 매개 변수, 즉 람다가 매핑 할 시퀀스 항목입니다.

따라서 람다 내부 표현식은 원래 문자열의 시작부터 순서의 색인까지 하나씩, 두 번째 부분 문자열의 쌍 (to infix function에 의해 생성됨)이며, 다른 하나는 색인에서 해당 색인의 끝까지입니다. 끈.

그래서 코드는 반드시 인덱스 시퀀스와 함께 작동해야합니다. 따라서 실수는 분명합니다.

+0

:

당신이 IntProgressionSequence<Int> A를 변환하려면

asSequence 확장 기능을 사용하십시오. 그렇다면 부분 문자열 메서드에 인덱스를 어떻게 전달합니까? – dabadaba

+0

@dabadaba, 이제 알겠습니다. 게시 한 코드에 실수가 있습니다. 전달 된 하나의 인자를 갖는'sequenceOf'는 그 하나의 아이템을 갖는 시퀀스를 반환합니다. 일련의 인덱스를 얻으려면 대신 (canonicalisedInput.lastIndex + 1 downTo 0) .asSequence()를 사용하십시오. – hotkey

+0

@dabadaba는 튜토리얼이 Kotlin이 발표되기 전에 촬영 된 것입니다. 'sequenceOf (IntProgression)'함수는 릴리즈 전에 삭제되고 제거되었습니다. – Ilya

3

sequenceOf(canonicalisedInput.lastIndex + 1 downTo 0) - 이 표현식은 하나의 IntProgression 항목으로 구성된 시퀀스를 만듭니다. 나는 공식 튜토리얼에 괜찮아요 동안 내 경우에이 오류를보고 이유를 실패

(canonicalisedInput.length downTo 0).asSequence() 
관련 문제