Scala类型参数括号

我知道特性Foo [T]意味着T是参数化类型.
但有时候我可以看到特性Foo [T1,T2]或特性Foo [T1,T2,R],我找不到任何描述类型括号内多种类型含义的内容,请你指点一下这种情况下的用法?根据我的推测,Foo [T1,T2]只是意味着,它定义了两个类型参数,它不必采用T1并返回T2.

当我今天阅读playframework文档时,我再次发现自己对这个问题感到困惑.在文档中,它说:

A BodyParser[A] is basically an Iteratee[Array[Byte],A],meaning that
it receives chunks of bytes (as long as the web browser uploads some
data) and computes a value of type A as result.

这个解释听起来像,第二个类型括号内的类型参数是返回类型.

我还记得Trait Function2 [-T1,-T2,R]扩展AnyRef意味着一个接受T1和T2的函数,返回一个R.

为什么他们把返回类型放在括号中?这是否意味着括号中的所有最后一个参数都是返回类型?或者他们刚刚为返回类型定义了一个新类型R?

解决方法

类型括号内的多个类型意味着对多种类型进行类型参数化.举个例子

trait Pair[A,B]

这是一对具有A型的值,另一个具有B型.

更新:

我认为你过多地解释了类型参数的语义.由多个参数参数化的类型就是这样,仅此而已.特定类型参数在类型参数列表中的位置不会以任何方式使其特殊.具体而言,类型参数列表中的最后一个参数不需要代表“返回类型”.

您引用的play框架中的句子解释了此特定类型的类型参数的语义.它没有推广到其他类型.对于函数类型也是如此:这里最后一个类型参数恰好表示’返回类型’.但是,对于其他类型,情况不一定如此.上面的类型对[A,B]就是这样的例子.这里B是该对的第二个组成部分的类型.这里根本没有“回归类型”的概念.

参数化类型的类型参数可以出现在参数化类型定义内的任何位置,其中可以出现“常规”类型.也就是说,类型参数只是在实例化参数化类型本身时绑定到实际类型的类型的名称.

考虑以下类Tuple的定义:

class Tuple[A,B](a: A,b: B)

它被实例化为一个Int和String元组的类型,如下所示:

type TupleIntString = Tuple[Int,String]

这基本上是一样的

class TupleIntString(a: Int,b: String)

对于官方来源,请查看Scala Language Specification.具体的第3.4节“基本类型和成员定义”在第4个项目符号点下面说:“参数化类型C [T_1,…,T_n]的基本类型是基本类型类型C,其中每次出现的C类型参数a_i都被相应的参数类型T_i替换.“

相关文章

共收录Twitter的14款开源软件,第1页Twitter的Emoji表情 Tw...
Java和Scala中关于==的区别Java:==比较两个变量本身的值,即...
本篇内容主要讲解“Scala怎么使用”,感兴趣的朋友不妨来看看...
这篇文章主要介绍“Scala是一种什么语言”,在日常操作中,相...
这篇文章主要介绍“Scala Trait怎么使用”,在日常操作中,相...
这篇文章主要介绍“Scala类型检查与模式匹配怎么使用”,在日...