다른 함수에 대한 참조를 반환하는 스칼라 함수를 갖고 싶습니다.스칼라 : 함수 참조 반환
14
A
답변
29
함수 유형을 반환 할 수 있습니다 (A => B
으로 정의 됨). 이 경우 Int Int :
scala> def f(x:Int): Int => Int = { n:Int => x + n }
f: (x: Int)(Int) => Int
이 함수를 호출하면 새로운 함수가 생깁니다. 일반 함수로 호출 할 수 있습니다
scala> f(2)
res1: (Int) => Int = <function1>
: (기능 객체 지향 다소 독특한)
scala> res1(3)
res2: Int = 5
7
한 가지 방법은 고차 기능을 사용할 수는 객체 사이의 느슨한 커플 링을 만드는 것입니다. 클래스 Alarm
아래 예에서
은 계산 된 값을 초과하는 경우 DangerLevel
검사 방법 check4Danger()
있다. Alarm 클래스는이를 호출하는 객체에 대해 아무것도 모릅니다.
클래스 Car
클래스에는 엔진 크래시 위험을 계산하는 익명 함수를 반환하는 engineCrashRisk()
메서드가 있습니다. Car
에는 Alarm에 대한 종속성이 없습니다.
case class Alarm(temperature: Double, pressure: Double){
val DangerLevel = 100000.0
def check4Danger(f: (Double, Double) => Double): Boolean = {
val risk = f(temperature, pressure)
if(risk > DangerLevel){
println("DANGER: "+ risk)
true
}else{
println("Safe: " + risk)
false
}
}
}
case class Car(fuelRate: Double, milage: Int){
def engineCrashRisk() =
(temperature: Double, pressure: Double) =>
temperature * milage + 2*pressure/fuelRate
}
val car = Car(0.29, 123)
val riskFunc = car.engineCrashRisk
val alarm = Alarm(124, 243)
val risk = alarm.check4Danger(riskFunc)
이 스크립트의 출력은 다음
Safe: 16927.862068965518
이 예에서 우리는 Alarm
및 Car
오브젝트 간의 의존 관계없는 방법 호출을 생성하는 클로저 익명 함수를 사용 하였다. 이 예제가 의미가 있습니까?
관련 문제
- 1. 스칼라 생성자에서 조기 반환
- 2. 스칼라 대 성능 테스트와 SQL 서버의 테이블 반환 함수
- 3. 참조 반환 값은
- 4. SQL에서 스칼라 값 함수 호출
- 5. SubSonic에서 스칼라 함수 호출
- 6. 스칼라 함수 호출
- 7. 스칼라 함수 맵
- 8. 반환 함수
- 9. SSIS에서 스칼라 값 함수 호출
- 10. 스칼라 패턴 일치 빠른 참조
- 11. 값 및 참조 유형 객체를 반환 할 수있는 일반 함수
- 12. PHP : 반환 값이 부울 인 참조 함수 - 이상한 고지
- 13. VBScript의 함수에서 참조 반환
- 14. C++에서 참조 반환
- 15. 엑셀 조회 반환 참조
- 16. 클래스에서 this로 반환 참조
- 17. 일반 캐스트 함수 작성 스칼라
- 18. 스칼라 함수를 사용한 함수 리터럴
- 19. 스칼라 :: Util 대 ref 함수
- 20. 함수 목록 참조
- 21. 함수 참조 용 사이트
- 22. C++ 함수 범위와 참조
- 23. 함수 참조 - 제발 알려주세요!
- 24. 구조체에서 함수 반환 (C)
- 25. jQuery를 아약스 함수 반환
- 26. 함수 C에서 포인터를 반환
- 27. 이벤트 핸들러 함수 반환
- 28. 함수에서 두 함수 반환
- 29. 함수 반환 System.IO.MemoryStream?
- 30. 배열에 대한 반환 함수
+1, Offtopic aside :'DANGER_LEVEL'을'DangerLevel'로 변경하십시오. Odersky 책에서는 상수에 PascalCase를 사용할 것을 권장합니다. – missingfaktor
@ Rahuλ 아니 젠장! 이 권고안은 완전히 정통적이라고 느낀다. 그러나 나는 위대한 지도자의 의지에 질문해야한다 :-) –