val B = new {
def apply : { val a : Int } => { val b : String ; val c : Int } =
x => new { val b = "Hi" ; val c = 0 }
}
我无法理解这段代码
它在做什么?
我如何使用B的应用。似乎B没有b或c ..
答案 0 :(得分:1)
在这里编译得很好。
scala> val B = new {
| def apply : { val a : Int } => { val b : String ; val c : Int } =
| x => new { val b = "Hi" ; val c = 0 }
| }
B: AnyRef{def apply: AnyRef{val a: Int} => AnyRef{val b: String; val c: Int}} = $anon$1@464bee09
签名很清楚,但是你必须习惯这个。
AnyRef
一个匿名对象。与java Object相似
{def apply: AnyRef{val a: Int} => AnyRef{val b: String; val c: Int}}
但是,您仍然可以通过结构类型获得签名。一世 通常不会建议,它在运行时使用反射,这使得 方法调用有点慢。
def apply: AnyRef{val a: Int} => AnyRef{val b: String; val c: Int}
它返回=>
,也称为Function1
,它是函数的缩写
带有一个参数的对象。这里采用类型为AnyRef{val a:
Int}
的参数,并返回类型为AnyRef{val b: String; val c: Int}
的对象。
与上述相同的评论适用于结构类型性质。
我建议如何编写此代码:
case class Foo(b: String, c: Int)
val B: Int => Foo = { x => Foo("Hi", 0) }