案例类在参数中具有更高阶函数

时间:2018-01-07 23:55:02

标签: scala

假设Case类在参数中具有更高阶的函数。例如

case class CC(a: String = "1",b: Int => Int,c : Int = 0,d: Boolean = false)
val v = 3
val rc = CC ("1",v => v+v,0,true) //rc: CC = CC(1,A$A161$A$A161$$Lambda$1856/1364270469@44fc4b1b,0,true)

为什么scala会给类提供相关的Int值与" b"?

2 个答案:

答案 0 :(得分:1)

值得注意的是,代码中的第二行(val v = 3)未被使用。您的案例类的第二个参数在代码的第一行中定义为一个函数,它接受Int并返回Int。在第三行中,通过正确传递这样一个函数v => v + v作为参数b来实例化CC实例。

当REPL向您显示CC实例时,它会显示一个与您作为b传递的匿名函数对应的类。

答案 1 :(得分:1)

正如其他人所指出的那样,你的函数定义中的v与指定的val v无关。也许以下示例有助于澄清:

case class CC(a: String = "1", b: Int => Int, c : Int = 0, d: Boolean = false)
val v = 3

// `v` below is unrelated to the assigned val `v`
val rc = CC ("1", v => v + v, 0, true)
rc.b(1)
// res1: Int = 2

// `v` below is the assigned val `v`
val rc = CC ("1", x => x + v, 0, true)
rc.b(1)
// res2: Int = 4