2012-05-26 3 views
0

가능한 중복 : 나는 특정 튜토리얼을 따라하면
What are all the uses of an underscore in Scala?스칼라에서 사용되는 밑줄 문자는 무엇입니까?

, 나는 다음과 같은 두 가지 용도가 같은 결과를 제공 볼 일이. 나는 첫번째 것을 이해한다. 그러나 나는 왜 제 2의 것이 또한 작동하는지 이해하지 못한다. 누군가 나에게 설명을 해줄 수 있습니까? 동시에 사용에 대한 요약을 줄 수 있습니까?

def sum (a:Int, b:Int) = a + b 

val sumAsFunction1 = sum(_:Int, _:Int) 
// I understand this, _ used as placeholder of parameters 

val sumAsFunction2 = sum _ 
// why this usage has the same effect as sumAsFunction1? 
+0

본인은이 질문에 대한 중복임을 동의하지만 답변은 초보자에게 가치가 있습니다. 어떻게 우리가이 두 가지 질문을 다른 초보자 용 혜택에 병합 할 수 있습니까? – chen

+0

이 답변은 중복으로 가능할 수 있지만 (실제로는 마지막 질문 만 중복됩니다.) 새로운 답변이 없을 것입니다. 우리는 이미 작성된 답변을 유지할 것이므로 나중에 방문한 사람들은 그 내용을 보거나 값을 매길 수 있습니다. –

답변

1

ETA-확장 메커니즘이 어떤 도움을 필요로하는 몇 안되는 장소 중 하나입니다. 간단한 예를 생각해

def foo() = { 
    println("foo"); 
    42 
} 

val bar1 = foo 
val bar2 = foo _ 

bar1bar2 사이에 근본적인 차이가 있습니다. 함수로 방법 변경 foobar2에 할당 : 전 하나 후자 동안 barfoo 및 지정 값으로 해석된다. 결과적으로 bar1은 단순한 Int 변수이고 bar2은 실제로 foo() 메서드 (및 "foo" 인쇄)를 호출하는 함수입니다.

1

밑줄은 많은 경우에 사용되지만이 경우에는 sum 함수의 호출되지 않은 버전을 원한다는 의미로 사용됩니다.

sum(a: Int, b:Int) = a + b을 정의하므로 sum _은 두 개의 인수를 취하고 그 합계를 반환하는 익명의 함수로 생각하십시오. Function2[Int,Int,Int]의 인스턴스이기 때문에 함수를 전달할 수 있습니다.

+0

"sum _ as an as an 익명 기능 "- 이것은 내 이해에 도움이된다. – chen

+0

'sum'은 함수가 아니므로 메소드입니다. 그것이 함수라면, 그것을 하나로 바꾸기 위해'_'을 사용하지 않아도됩니다. –

+0

아 나는 기능과 방법의 기술적 차이점을 전혀 몰랐다. 이것 (http://jim-mcbeath.blogspot.com/2009/05/scala-functions-vs-methods.html)이 내용을 지 웁니다. – Dylan

관련 문제