使用类型[斯卡拉]
问题描述:
中使用的方法我正在浏览斯卡拉代码,并发现应用方法也用于type
。使用类型[斯卡拉]
type Common = {
def apply: {val func: {} => {val a: A}; val c: C} => {val b: B}
}
是什么上面的代码是什么意思?
据我所知,这意味着Common是指所有包含apply方法的类型。但是,问题是什么样的应用方法是否意味着什么?应用方法的输入是什么?
此外,
type Common = {
def apply({val func: {} => {val a: A}; val c: C} => {val b: B})
}
是哪两个普通型的区别?
答
这被称为结构类型。它仅仅意味着你通过它的结构而不是(仅)通过它的名字来描述一个类型。 Foo{val a: String}
类型的含义是“类型为Foo
,但也有val a: String
”。 {val a: String}
与AnyRef{val a: String}
相同。所以{}
意味着AnyRef{}
,这基本上意味着与AnyRef
相同。
当然,您也可以在结构类型中使用结构类型,这就是Common
所做的。 Common
是AnyRef的子类型,它有一个apply
方法,该方法不接受任何参数,而是返回一个带有一些复杂结构类型作为类型参数的函数。要破译那些你只需递归应用第一段的规则。
您将如何使用此Common
类型?我建议不要,但是...的结构类型的方法
scala> :paste
// Entering paste mode (ctrl-D to finish)
class A; class B; class C
type Common = {
def apply: {val func: {} => {val a: A}; val c: C} => {val b: B}
}
class HasA { val a = new A }
class HasB { val b = new B }
class HasC {
val func = (a: AnyRef) => new HasA
val c = new C
}
class MyCommon { def apply = (h: Any) => new HasB }
// Exiting paste mode, now interpreting.
scala> def common(c: Common) = c
common: (c: Common)Common
scala> common(new MyCommon)
res0: Common = [email protected]
scala> res0.apply(new HasC)
res1: AnyRef{val b: B} = [email protected]
scala> res1.b
res2: B = [email protected]
的调用也可能招致运行时开销,因为它们与反射来实现。
+0
你能解释一下上面的应用方法吗? – kong0329
区别在于第二个是无效的语法。 –
那么,第一个是什么意思?该应用方法的输入是什么? – kong0329