Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 函数[任意,字符串]特性和方差_Scala_Variance - Fatal编程技术网

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对我来说,重复的似乎是一个有效的问题,并且有我的反对票。即使有一个现有的问题,如果你想搜索神奇的术语“协方差”和“逆变”,它也会对你有所帮助是的,为什么是反对票?可能的重复对我来说似乎是一个有效的问题,而且我有我的反对票。即使有一个现有的问题,如果你想搜索神奇的术语“协方差”和“反方差”,在这里也会帮到你是的,为什么是反对票?可能的重复对我来说似乎是一个有效的问题,而且我有我的反对票。即使有一个现有的问题,如果你想搜索神奇的术语“协方差”和“反方差”,在这里也会帮到你是的,为什么是反对票?可能的重复对我来说似乎是一个有效的问题,而且我有我的反对票。即使有一个现有的问题,如果你想搜索神奇的术语“协方差”和“反方差”,在这里也会帮到你