Tho*_*mas 30
您可以返回一个函数类型(由此定义A => B).在这种情况下Int到Int:
scala> def f(x:Int): Int => Int = { n:Int => x + n }
f: (x: Int)(Int) => Int
Run Code Online (Sandbox Code Playgroud)
当您调用该函数时,您将获得一个新函数.
scala> f(2)
res1: (Int) => Int = <function1>
Run Code Online (Sandbox Code Playgroud)
这可以称为正常功能:
scala> res1(3)
res2: Int = 5
Run Code Online (Sandbox Code Playgroud)
一种方法(对于功能对象而言有点独特),您可以使用更高阶的函数来创建对象之间的松散耦合.
在下面的示例中,类Alarm有一个方法check4Danger()来检查计算的值是否超过DangerLevel.Alarm类对调用它的对象一无所知.
本Car类有一个方法engineCrashRisk(),它返回计算引擎崩溃的风险匿名函数.Car没有依赖警报.
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)
Run Code Online (Sandbox Code Playgroud)
该脚本的输出是:
Safe: 16927.862068965518
Run Code Online (Sandbox Code Playgroud)
在这个例子中,我们使用带闭包的匿名函数在Alarm和Car对象之间创建一个无依赖的方法调用.这个例子有意义吗?
| 归档时间: |
|
| 查看次数: |
12036 次 |
| 最近记录: |