2017-03-17 50 views
0

我有一个函数的一般像这样:

@import java.util.List; 

@(field:List[_], min:Int=1)(f: (_, Int) => Html) 
@{ 
    (0 until math.max(if (field.isEmpty) 0 else field.size, min)) 
     .map(i => f(field.get(i),i)) 
} 

当我运行这段代码,我得到这个真的很无益的错误信息:

type mismatch; found : _$1 required: _$2 

我不知道这是什么意思,但错误似乎与field.get(i) - 任何想法如何解决这个问题?

+1

'_ $ 1'和'_ $ 2'是编译器为您定义为'List [_]'和'(_,Int)=> Html'的通配符的存在类型命名。你得到一个错误,因为它们不一样,但是......你在做什么?通配符类型参数的功能没有多大意义。即使使用'Any'也会更好,但很难理解为什么你会忽略这种类型。 –

回答

0

您块需要两个参数列表:

  1. 第一个有两个参数:
    • 领域:列表[_]类型_ $ 1
    • 分钟< ---列表:诠释
  2. 第二个带有一个参数的参数,它是一个函数(f)谁(类型_ $ 2的东西,一个Int)并返回Html。

如果假设的东西与类型与第一个参数完全一样的你的领域保持清单应在F进给,你也可以定义功能,如:

def convertSomethingGenericToHtml[T](field: List[T], min: Int = 1)(f: (T, Int) => Html) { 
    (0 until math.max(if (field.isEmpty) 0 else field.size, min)).map(i => f(field.get(i),i)) 
}