Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何匹配无形状多边形中的Scala对象类型(如None或Nil)?_Scala_Shapeless - Fatal编程技术网

如何匹配无形状多边形中的Scala对象类型(如None或Nil)?

如何匹配无形状多边形中的Scala对象类型(如None或Nil)?,scala,shapeless,Scala,Shapeless,说你有这个名单 val l = Some(1) :: Nil :: HNil 您希望创建一个无形状的多边形函数,该函数将与Nil上的一个隐式函数匹配,但在Some上与另一个隐式函数匹配。天真地说,我们可能认为这是可行的: object matcher extends Poly1 { implicit def caseNil = at[Nil.type](x => 0) implicit def caseSome[T] = at[Some[T]](x => 1) } 然而,

说你有这个名单

val l = Some(1) :: Nil :: HNil
您希望创建一个无形状的多边形函数,该函数将与
Nil
上的一个隐式函数匹配,但在
Some
上与另一个隐式函数匹配。天真地说,我们可能认为这是可行的:

object matcher extends Poly1 {
  implicit def caseNil = at[Nil.type](x => 0)
  implicit def caseSome[T] = at[Some[T]](x => 1)
}
然而,这显然失败了,尽管我可能尝试,但我似乎无法创建一个与Scala对象类型匹配的无形状的
Poly
,如
Nil
None
。匹配一个通用的
列表[T]
很容易,但是匹配
Nil
似乎是不可能的


是否可以创建与Scala对象类型匹配的无形状的
Poly
案例?如果是,怎么做?如果没有,为什么不呢?

它对我来说编译得很好:

@ object matcher extends Poly1 {
    implicit def caseNil = at[Nil.type](x => 0)
    implicit def caseSome[T] = at[Some[T]](x => 1)
  }
defined object matcher

@ val l = Some(1) :: Nil :: HNil
l: Some[Int] :: Nil.type :: HNil = Some(1) :: List() :: HNil

@ l.map(matcher)
res11: Int :: Int :: HNil = 1 :: 0 :: HNil

你的代码对我来说似乎很有用,你能给我举个例子说明“这个失败得多么惊人”吗?嗯,这是出乎意料的。事实证明,我实际上是想找出元组中的匹配方式。我最终需要的是一个类型别名。