Scala 函数[任意,字符串]特性和方差
显示以下方差示例Scala 函数[任意,字符串]特性和方差,scala,variance,Scala,Variance,显示以下方差示例 scala> trait Function[-Arg, +Return] { | def apply(arg: Arg): Return | } defined trait Function scala> val foo = new Function[Any, String] { | override def apply(arg: Any): String = | "Hello. I received " + ar
scala> trait Function[-Arg, +Return] {
| def apply(arg: Arg): Return
| }
defined trait Function
scala> val foo = new Function[Any, String] {
| override def apply(arg: Any): String =
| "Hello. I received " + arg
| }
foo: Function[Any,String] = $anon$1@5db0e244
scala> val bar: Function[String, Any] = foo
bar: Function[String,Any] = $anon$1@5db0e244
我们可以将
foo
分配给bar
的原因是什么?我有一个粗略的想法,但我想我会直截了当地问。正是因为方差注释使函数[Any,String]
成为函数[String,Any]
的一个子类型
协方差注释,
+
表示较窄的类型参数产生较窄的构造类型,而逆方差注释-
表示较宽的类型参数产生较窄的构造类型。正是因为方差注释使函数[Any,String]
成为函数的子类型[字符串,任意]
协方差注释,
+
表示较窄的类型参数产生较窄的构造类型,而逆方差注释-
表示较宽的类型参数产生较窄的构造类型。正是因为方差注释使函数[Any,String]
成为函数的子类型[字符串,任意]
协方差注释,
+
表示较窄的类型参数产生较窄的构造类型,而逆方差注释-
表示较宽的类型参数产生较窄的构造类型。正是因为方差注释使函数[Any,String]
成为函数的子类型[字符串,任意]
协方差注释,
+
表示较窄的类型参数产生较窄的构造类型,而逆变注释-
,表示较宽的类型参数产生较窄的构造类型。Ah,因此字符串
(-Arg)接受它自己的类型或super。而任何
(+Return)接受它自己的类型或子类型?这是理解上面的val bar…=foo
工作原理的合理推理吗?是的,基本上就是这样。另一个推论是:没有方差注释,不同的参数类型产生不相关的构造类型,而不管参数之间的关系如何(如果有)。其他有助于推理类型兼容性的事实包括:因为Scala类型系统是一个完整的晶格,所以任何两种类型都有一个公共超类型和一个公共子类型。相反,任何两种类型都不需要彼此具有超类型或子类型关系。用Timewords更容易解释:)啊,所以String
(-Arg)接受自己的类型或super。而任何(+Return)接受它自己的类型或子类型?这是理解上面的val bar…=foo
工作原理的合理推理吗?是的,基本上就是这样。另一个推论是:没有方差注释,不同的参数类型产生不相关的构造类型,而不管参数之间的关系如何(如果有)。其他有助于推理类型兼容性的事实包括:因为Scala类型系统是一个完整的晶格,所以任何两种类型都有一个公共超类型和一个公共子类型。相反,任何两种类型都不需要彼此具有超类型或子类型关系。用Timewords更容易解释:)啊,所以String
(-Arg)接受自己的类型或super。而任何(+Return)接受它自己的类型或子类型?这是理解上面的val bar…=foo
工作原理的合理推理吗?是的,基本上就是这样。另一个推论是:没有方差注释,不同的参数类型产生不相关的构造类型,而不管参数之间的关系如何(如果有)。其他有助于推理类型兼容性的事实包括:因为Scala类型系统是一个完整的晶格,所以任何两种类型都有一个公共超类型和一个公共子类型。相反,任何两种类型都不需要彼此具有超类型或子类型关系。用Timewords更容易解释:)啊,所以String
(-Arg)接受自己的类型或super。而任何(+Return)接受它自己的类型或子类型?这是理解上面的val bar…=foo
工作原理的合理推理吗?是的,基本上就是这样。另一个推论是:没有方差注释,不同的参数类型产生不相关的构造类型,而不管参数之间的关系如何(如果有)。其他有助于推理类型兼容性的事实包括:因为Scala类型系统是一个完整的晶格,所以任何两种类型都有一个公共超类型和一个公共子类型。相反,任何两种类型都不需要彼此具有超类型或子类型关系。用Timewords更容易解释:)是的,为什么反对票?可能是d对我来说,重复的似乎是一个有效的问题,并且有我的反对票。即使有一个现有的问题,如果你想搜索神奇的术语“协方差”和“逆变”,它也会对你有所帮助是的,为什么是反对票?可能的重复对我来说似乎是一个有效的问题,而且我有我的反对票。即使有一个现有的问题,如果你想搜索神奇的术语“协方差”和“反方差”,在这里也会帮到你是的,为什么是反对票?可能的重复对我来说似乎是一个有效的问题,而且我有我的反对票。即使有一个现有的问题,如果你想搜索神奇的术语“协方差”和“反方差”,在这里也会帮到你是的,为什么是反对票?可能的重复对我来说似乎是一个有效的问题,而且我有我的反对票。即使有一个现有的问题,如果你想搜索神奇的术语“协方差”和“反方差”,在这里也会帮到你