Scala 为什么这种模式匹配不起作用?
我有一个泛型类Scala 为什么这种模式匹配不起作用?,scala,pattern-matching,Scala,Pattern Matching,我有一个泛型类Book[T](索引:Int,类型:T),还有一个类型为Book的对象foo。我不知道如何访问索引和类型。我试过: 1. foo match { case Book[T](index: Int, type:T) => {} } 2. foo match { case Book(index: Int, type:T) => {} } 3. foo match { case foo: Book[T] => { foo.index } } 所有故障均显示以下消息: 1
Book[T](索引:Int,类型:T)
,还有一个类型为Book
的对象foo
。我不知道如何访问索引和类型。我试过:
1. foo match { case Book[T](index: Int, type:T) => {} }
2. foo match { case Book(index: Int, type:T) => {} }
3. foo match { case foo: Book[T] => { foo.index } }
所有故障均显示以下消息:
1. class Book does not take type parameters
2. class Book not found
3. index is not a member of Book
谢谢。好的
类型
是scala已经使用过的关键字。
您可以尝试使用其他关键字而不是type
,并使用case class
进行模式匹配,以实现相同的效果
case class Book[T](index: Int, bookType : T)
val foo = Book(1,Book)
// foo : stack.Book[stack.Book.type] = Book(1,Book)
foo match {
case Book(i,t) => "index : " + i + ", type : " + t // play around with i & t
}
//> res0: String = index : 1, type : Book
所以你有
case类Book[T](index:Int,`type`:T)
作为书的定义?@om nom nom-这是一个反问句,对吗?它显然不是案例类
或索引
将是书籍
的成员。所以这是一个问题…@RexKerr。。。好的,让我们展示所有的卡片:type
是scala中的一个关键字,所以我们不能简单地将它用作变量名:@user1377000必须用反勾来转义它。它只是classbook[T](index:Int,type:T)
。好吧。。。我怎样才能达到我想要的呢?<代码>类书和