2014-01-13 4 views
0
scala> def judge(func:()=> Boolean) { 
    | val result = func() 
    | println(result) 
    | } 
judge: (func:() => Boolean)Unit 

scala> def compare = { 6 > 4 } 
compare: Boolean 

scala> judge(compare) 
<console>:10: error: type mismatch; 
found : Boolean 
required:() => Boolean 
       judge(compare) 
        ^

scala> def compare() = { 6 > 4 } 
compare:()Boolean 

scala> judge(compare) 
true 

def compare() = { 6 > 4 }은 무엇을 의미합니까? 두 '비교'기능의 차이점은 무엇입니까? 혼란 스러웠습니다.스칼라에서이 정의는 무엇을 의미합니까?

감사합니다.

답변

2
def compare = { 6 > 4 } 

은 6과 4를 비교하고 부울 값 (True)을 반환하는 함수를 만드는 것을 의미합니다.

이것은 소위 0-arity 방법이라고합니다.

0-arity의 Scala 메서드는 괄호()없이 또는 정의 할 수 있습니다. 메서드에 일종의 부작용이 있음을 사용자에게 알리는 데 사용됩니다 (예 : 표준 출력으로 인쇄하거나 데이터를 손상시키는 것과 같은).

괄호를 정의에 포함하는 경우 메서드 호출시 선택적으로 괄호를 생략 할 수 있습니다. 또한

Programming in Scala를 참조하십시오

이러한 매개 변수가 방법은 스칼라에서 매우 일반적이다. 반대로 def height() : Int와 같이 빈 괄호로 정의 된 메서드는 빈 괄호 메서드라고합니다. 매개 변수가 없으면 항상 매개 변수없는 메서드를 사용하고 포함 된 개체의 필드를 읽는 것만으로 메서드가 변경할 수있는 상태에 액세스하는 것이 좋습니다 (특히 변경 가능한 상태는 변경되지 않음).

이 협약은 균일 한 접근 원칙을 지원하는 [...]

가 요약하면, 오프 떠나 매개 변수를 수행하지 않고 즉, 매개 변수가없는 방법으로 부작용이없는 방법을 정의하는 스칼라에서 스타일을 권장합니다 빈 괄호. 반면에, 괄호없이 부작용이있는 메소드를 정의해서는 안됩니다. 그 메소드의 호출은 필드 선택처럼 보일 것이기 때문입니다. 당신이 여기에서 찾을 수있는이 주제에 대한

추가 정보 :

+0

스칼라에서 프로그래밍과 사용자의 대답을 읽었으며 이해합니다. 고맙습니다. – user3190192

0

함수는 항상 true를 반환합니다.

+0

다음 번에 더 간결하게 말하면 '함수'라고 말할 수 있습니다. –

관련 문제