본문 바로가기

Development/Programming

[Scala] Automatic Type-Dependent Closure Construction


스칼라에서는 이름이 없는 함수를 파라미터로 전달이 가능하다. 


whileLoop라는 함수가 정의되어지고 Boolean과 Unit을 받는다. 그리고 내부에서는 true인 경우 계속해서 whileLoop를 호출하도록 구성이 되어져서 다른 언어에서 키워드처럼?! 사용이 가능하다.


  1. object TargetTest1 extends App {
  2. def whileLoop(cond: => Boolean)(body: => Unit): Unit =
  3. if (cond) {
  4. body
  5. whileLoop(cond)(body)
  6. }
  7. var i = 10
  8. whileLoop (i > 0) {
  9. println(i)
  10. i -= 1
  11. }
  12. }


다른 예를 보자 이것은 unless를 사용하는 방법이다. 위의 방법과는 다르게 body후에 파라미터를 입력 받는 방식이다.


  1. object TargetTest2 extends App {
  2. def loop(body: => Unit): LoopUnlessCond =
  3. new LoopUnlessCond(body)
  4. protected class LoopUnlessCond(body: => Unit) {
  5. def unless(cond: => Boolean) {
  6. body
  7. if (!cond) unless(cond)
  8. }
  9. }
  10. var i = 10
  11. loop {
  12. println("i = " + i)
  13. i -= 1
  14. } unless (i == 0)
  15. }


이 문법을 이용해서 자신만의 키워드를 많이 만들어 낼 수 있을 것 같아서 좋아 보인다.



'Development > Programming' 카테고리의 다른 글

[Scala] Pattern Matching  (0) 2015.03.02
[Scala] Higher-order Functions  (0) 2015.02.18
[Scala] Nested Functions  (0) 2015.02.16
[Java Design Pattern] Design Patterns in Java Tutorial  (0) 2015.02.10
[Scala] Mixin Class Composition  (0) 2015.02.06