Scala-方法类型参数

时间:2018-08-12 21:22:19

标签: scala types type-parameter context-bound

我正在尝试通过scala编译器理解一些自动生成的代码,但是我不知道要搜索什么。

我有以下课程:

main_queue

反编译类文件后,f1和f2方法的签名如下:

foreach (FormElements e in Model.FormElements)
        {
            var fields = Model.FormElementTypes.Where(f => f.ID == e.FormElementTypesID);
            if (fields != null) {
                foreach (var field in fields) {
                    string s = field.Name.ToString();
                }
            }
        }

如您所见,这些方法还有一个附加参数。在哪里可以找到有关此方法类型参数符号 F [_,_]:Arrow1 的文档?

1 个答案:

答案 0 :(得分:1)

您正在寻找“上下文范围”

当您在规范中查询"Type parameters"时,在第一段中会遇到Button,并且还会获得指向Context Bounds and View Bounds的链接,其中显示为 (报价略有变化,简化为具有单个上下文绑定的情况)

  

方法或非特征类的类型参数A: B也可以具有一个或   更多上下文范围A。在这种情况下,类型参数可以是   实例化为A : T的任何类型的证据   S满足绑定的S的实例化点。这样的证据   由类型为T的隐式值组成。

     

包含带有视图或上下文的类型参数的方法或类   bounds被视为等效于具有隐式方法   参数。首先考虑带有   [...]上下文范围,例如:

T[S]
     

然后将上面的方法定义扩展为

def f[A: U1](params): R = ...
     

其中def f[A](params)(implicit v1: U1[A]): R = ... 是新引入的隐式的新名称   参数。此参数称为证据参数。

这里是link to FAQ,其中包含有关该主题的更多信息。