2012-10-03 8 views
3

http://www.scala-lang.org/docu/files/ScalaByExample.pdf일부 스칼라 코드를하시기 바랍니다 설명 -

이 코드 조각 읽기 초보자 :

def While (p: => Boolean) (s: => Unit) { 
    if (p) { s ; While(p)(s) } 
} 

이 설명을 제공됩니다 :

fi의이 첫 번째 테스트 함수를 매개 변수로 함수가 필요하지만, 은 매개 변수를 취하지 않고 부울 값을 산출합니다. 두 번째 매개 변수로 은 매개 변수를 사용하지 않고 Unit 유형의 결과를 생성하는 명령 기능을 사용합니다. while 함수는 테스트 함수가 true이면 명령 함수를 호출합니다.

여기서 if (p)은 true 또는 false로 평가됩니까?

s 어딘가에 선언하지 않아야합니까? 기능 s에 대한 코드가 없습니까?

답변

4

여기서 if (p)은 true 또는 false로 평가됩니까?

정확히 그 줄에 있습니다.

ps 때문에 While있어서의 파라미터리스트에서 그 앞의 =>, 통화 별 이름 파라미터이다. 그들의 이름이 While의 시체에서 사용될 때마다 평가됩니다.

어딘가에 s을 선언해야합니까? 기능 s에 대한 코드가 없습니까?

s 단지 p처럼 While 메소드 파라미터이다. (이 질문을하는 이유는 s이지만, p은 아닙니다.) 스칼라의 메서드와 함수는 여러 매개 변수 목록을 가질 수 있습니다. While 메서드에는 두 개의 매개 변수 목록이 있습니다.

당신은 그것을 Boolean (매개 변수 p)로 평가 뭔가를 전달하여이 While 메소드를 호출하고, 블록 (매개 변수 s). 이 예에서는 p

var i = 0 
While (i < 5) { 
    i = i + 1 
    println(i) 
} 

i < 5하는 Boolean 평가 함수이며 s{}의 블록이다. 당신이 입력 서명 => Boolean 어떤 기능 할 수 p를 들어

0

, s에 대한 서명 => Unit에 입력 어떤 기능을 할 수 있습니다.

따라서 p은 while 함수의 중지 기준입니다.당신의 p 기능 false으로 평가되면 그것은 true합니다 (s 기능)를 한 번 호출 될 경우, while 루프에서 휴식과 while 기능을합니다 (p 기능 같은 정지 기준과 다른 시간에 재귀 적으로 호출)와 몸.

관련 문제