정확한 오류는 다음과 같습니다
Type mismatch.
Required: Array<Car>
Found: Array<out Car>
문제는 당신이 vararg cars: Car
함수 매개 변수가있을 때, 함수 내에서 그 형태는 기본적으로 인수의 읽기 전용 배열을 나타냅니다 Array<out Car>
,라는 것이다 함수가 호출되었습니다. 어쨌든 vararg
(Kotlin의 함수 매개 변수는 읽기 전용 val
s입니다.이 함수는 매우 유사합니다)로 인수를 수정하는 것은 좋은 방법이 아닙니다.
그러나 귀하의 drive
기능에는 보통 Array<Car>
이 필요합니다. 물론 물론 쓸 수 있습니다. 따라서 이러한 함수 시그니처를 유지하려면 읽기 전용 어레이의 모든 것을 포함하는 새로운 배열을 만들어야합니다. 이는 다음 구문을 사용하여 생성 될 수
가
drive(arrayOf(*cars))
이것은 가변 인자 매개 변수를 사용하는 우리가 일반적으로 어레이를 만들 arrayOf
함수 호출 및 배열의 요소를 전달하는 방법은 확산 연산자를 사용 (docs here)와 같이 (cars
은 buy
함수 내부에 있음).
모든 것이 복잡하게 들릴 수도 있지만 실제로는 바이트 코드의 내부에서 Array.copyOf
을 사용하기 때문에 매우 효율적인 솔루션입니다.
vararg 키워드가 이미 존재합니다. – Tarek360
두 번째 함수에 추가하려는 경우에도 컴파일 오류가 수정되지 않습니다. – Tarek360