기본 콘텐츠로 건너뛰기

kotlin 람다 함수

 개인적으로 람다 함수는 영~~익숙해 지지 않는 면이 있어서 kotlin 을 좀 보는 김에 한번 정리를 해 봤습니다.

//3번
fun strLength3(s:String) : Int{
return s.length
}

fun printStrLength(s:String,p:(String)->Int){
println("String = " + s)
println("String Length = ${p(s)}" )
}

fun main() {
var strLength : (String) -> Int = {s -> s.length} //1번
var strLength2 = {s:String -> s.length} //2번

println("*".repeat(30))
println(strLength("Strike"))
println(strLength2("Air"))
println("*".repeat(30))

printStrLength("Hello, World!"){s:String -> s.length} //4번
println("*".repeat(30))

printStrLength("Water",strLength) //5번
println("*".repeat(30))

printStrLength("Bread",::strLength3) //6번
println("*".repeat(30))
}

1번이 정석대로의 선언방식이라고 합니다.

 

2번은 스마트 캐스팅을 이용한 선언이라던데(배우는 중이라 확실히는 모르겠습니다) 어쨌던 1번과 2번은 결과적으로 같은 내용입니다. 표현방법의 차이라고 할까요.

 

3번은 1번 2번과 같은데 흔히 사용하는 일반적인 함수로 만든거고요.

 

4번은 직접 함수 내용을 인자로 사용한것인데...원래대로라면 

printStrLength("Hello, World!",{s:String -> s.length})

이렇게 사용해야 하지만(실제로 이렇게 써도 됩니다) 위에 처럼 사용해도 된답니다. 사용상의 편이성을 위한 것인듯 합니다.

 

5번은 뭐....보시듯 저렇게 사용하면 된다는거고....

 

6번 일반 함수는 사용하려면 '::' 를 함수명 앞에 붙여야 한답니다.

 

한번에 정리해 봤습니다.

 

댓글

이 블로그의 인기 게시물

pygame 에서 이미지 회전하는 방법

 pygame 에서 transform.rotate 를 사용해서 이미지를 회전시켜 보면 생각과는 달리 요상하게 회전합니다.    따라서 이를 해결해 보고자 검색해 보다 다음 링크를 찾았습니다. https://stackoverflow.com/questions/4183208/how-do-i-rotate-an-image-around-its-center-using-pygame/54714144 위 링크를 보면 파이게임의 이미지 회전이 왜 그렇게 이상한지 알 수 있고 답변하신 분이 blitRotate 라는 함수를 만들어 놓아서 이용할 수 있습니다.  제 소스에 가져와서 테스트를 해 봤는데 제 생각대로 회전 하더군요.  def blitRotate(image, pos, originPos, angle):       #calcaulate the axis aligned bounding box of the rotated image     w, h       = image.get_size()     box        = [pygame.math.Vector2(p) for p in [(0, 0), (w, 0), (w, -h), (0, -h)]]     box_rotate = [p.rotate(angle) for p in box]     min_box    = (min(box_rotate, key=lambda p: p[0])[0], min(box_rotate, key=lambda p: p[1])[1])     max_box    = (max(box_rotate, key=lambda p: p[0])[0], max...

모닝 JA 엔진오일 교환. 보쉬필터 구입

요즘은 주행거리가 1만km 가 안되다보니 1년에 한번씩 엔진오일을 교환하고 있습니다.  1년에 한번이라 그냥 오토큐에서 교환을 했었지만 오토큐의 오일교환 가격이 너무 오른데다가 이젠 보증도 끝났기 때문에 오일과 필터를 구입해서 공임나라로 갔습니다.  > 오일은 kixx g1 fe 1L x 3 을 구입하고 필터는 보쉬제품으로 구입했습니다.   A3003 이 에어필터이고 O0356 이 오일필터 입니다. 기아의 순정부품보단 조금 가격이 저렴합니다.  > 오랜만에 공임나라 갔는데 교환공임이 17000원 이네요. 물가가 오른만큼 오일교환 비용도 예전보다 좀 올랐네요.  필터 품번도 기록해 둘겸 올려 봅니다. ^^;

VirtualBox 에 Lubutu 설치

 얼마전에 antix linux 를 설치했었는데 아무래도 늘 이용하던 패키지들이(앱들이) 아니다 보니 이런저런 시간지연(?)이 좀 되어서 천천히 알아가기로 하고 일단 익숙한 xubuntu 를 설치해서 쓰고자 했습니다만... 제가 보통 쓰는 virtualbox 에서 xubuntu 가 설치완료가 안되더군요. 중간에 멈춰버립니다. 부팅해보면 설치는 대충된거 같은데 뭔가 마지막 프로세스를 완료하지 못해서인지 로그인도 안됩니다.  몇번 해보다 안되서 그냥 루분투를 설치했습니다. 루분투는 잘 설치되네요. 루분투는 개인적으론 좀 애매하다고 생각해서....일반적인 데스크탑으로 쓰기엔 xubuntu 정도는 되야 하지 않나 생각합니다.  루분투는 넷북에 설치해 본 바로도 xubuntu 보다 빠르다는 느낌이 없어서 말이죠. 저사양 배포판일텐데.....뭐..넷북이 워낙에 느려서 그럴수도 있지만 antix 리눅스 설치해 본 바로는 lubuntu 보단 낫더라고요. virtualbox에 xubuntu 가 설치가 안되서 예상외로 시간을 좀 까먹었네요. 쩝....