[SCALA] 중괄호 코드 블록으로 전달 함수
SCALA중괄호 코드 블록으로 전달 함수
몇 번 그와 같은 스칼라 코드를 보았다 :
object Doer{
def doStuff(op: => Unit) {
op
}
}
이 방법으로 호출 :
Doer.doStuff{
println("Done")
}
무엇이 나에게 이상한 것은 함수가 중괄호 사이의 코드의 단지 블록으로 다른 함수에 전달하는 방법이다. 그리고 일반적으로 시작을 표시하고 인수 목록의 끝에도 더 괄호가 없습니다.
이 스칼라 구문 / 기능의 이름은 무엇입니까? 어떤 경우에 나는 그것을 사용할 수 있습니까? 그것은 어디 문서화?
해결법
-
==============================
1.이것은 인수 없음 기능 또는 썽크 중 하나라고 및 통화 별 이름 평가의 예이다 : http://www.scala-lang.org/old/node/138
이것은 인수 없음 기능 또는 썽크 중 하나라고 및 통화 별 이름 평가의 예이다 : http://www.scala-lang.org/old/node/138
당신은 어디서나 매개 변수 목록이 거의 nullaries를 사용할 수 있습니다. 그들은 그들이 보통의 값처럼 보이게, 그들은이 참조 될 때마다 호출, 인수 기능의 주위에 기본적으로 그냥 문법 설탕입니다.
그래서
def doSomething(op: => Unit) { op } doSomething { println("Hello!") }
정확히 동일하다 :
def doSomething(op: () => Unit) { op() } doSomething(() => println("Hello!"))
한 가지는 그들이 뭔가 같은, 그들은 참조 될 때마다 호출됩니다 nullaries에 유의해야 할 사항은 다음과 같습니다
def foo(op: => Int) = op + op foo { println("foo") 5 }
두 번 "foo는"인쇄합니다.
편집 : 제로 인수 함수의 인수 없음 기능 다릅니다가 nullaries하지 일류 값이다라고 랜달의 코멘트, 큰 방법 중 하나를 확장합니다. 예를 들어, 목록 [() => 지능이]하지만 당신이 목록 [=> Int 인]을 가질 수있을 수 있습니다. 그리고 당신은 같은 것을 가지고있는 경우 :
def foo(i: => Int) = List(i)
당신은 목록 만 반환 값에 null의 기능을 추가하지 않습니다.
from https://stackoverflow.com/questions/22670356/passing-function-as-block-of-code-between-curly-braces by cc-by-sa and MIT license
'SCALA' 카테고리의 다른 글
[SCALA] 간단한 빌드 도구를 사용하여 독립 실행 형 항아리 만들기 (0) | 2019.11.26 |
---|---|
[SCALA] 어떻게 플레이에 Logger.debug 출력을 강제로! 프레임 워크 specs2 테스트? (0) | 2019.11.26 |
[SCALA] 거기 비록 SBT는 지역 받는다는 저장소에서 파일을 찾을 수 없습니다 (0) | 2019.11.26 |
[SCALA] 삼항 연산자 유사하려면? (0) | 2019.11.26 |
[SCALA] 스칼라 2.10 + JSON 직렬화 및 역 직렬화 (0) | 2019.11.25 |