は、次の関数の定義を参照してください:Scalaのエラー:型の引数はクラス型パラメータの境界に準拠していない
class Entity[T](
val pi : T => String,
val si : T => Map[Symbol,String],
val tag : ClassTag[T],
val address: T=>AnyRef
) {
// some other definitions here ...
def filterEntity(attribute: DiscreteAttribute[T], value: String):Unit={
// nothing
}
}
コンパイラは私に次のエラーを与える:
/Users/i-danielk/ideaProjects/saul/src/main/scala/edu/illinois/cs/cogcomp/lfs/data_model/entity/Entity.scala:67: type arguments [T] do not conform to class DiscreteAttribute's type parameter bounds [T <: AnyRef]
[error] def filterEntity(attribute: DiscreteAttribute[T], value: String):Entity[T]={
そして、ここでは、の定義ですDiscreteAttribute
:
case class DiscreteAttribute[T <: AnyRef](
val name : String,
val mapping: T => String,
val range : Option[List[String]]
)(implicit val tag : ClassTag[T]) extends TypedAttribute[T,String]{
....
}
どこが間違っているのですか?
アップデート:以下のいずれかの動作しません。ここで
def filterEntity(attribute: DiscreteAttribute[T <: AnyRef], value: String):Entity[T]={
はエラーです:
/Users/i-danielk/ideaProjects/saul/src/main/scala/edu/illinois/cs/cogcomp/lfs/data_model/entity/Entity.scala:67: ']' expected but '<:' found.
[error] def filterEntity(attribute: DiscreteAttribute[T <: AnyRef], value: String):Entity[T]={
アップデート2:ここではそれが使用されています方法です:
val filteredConstituent= EdisonDataModel.constituents.filterEntity(EdisonDataModel.Eview,"Token")
object EdisonDataModel extends DataModel {
val Eview = discreteAttributeOf[Constituent]('CviewName){
x=>x.getViewName
}
と
def discreteAttributeOf[T <: AnyRef](name : Symbol)(f : T => String)(implicit tag : ClassTag[T]) : DiscreteAttribute[T] = {
new DiscreteAttribute[T](name.toString,f,None)
}
アップデート3: 同じエラーは、次の関数の定義のために保持している:あなたはfilterEntity方法に影響を及ぼしているT型に対する制約を定義する必要が
def filterEntity(attribute: DiscreteAttribute[T], value: String):Unit={
// empty
}
'filterEntity'の' T'はどこから来ますか? –
ここのコードサンプルは不完全です。 filterEntityの定義環境を投稿する – Daenyth