Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.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 混合隐式解析和lambdas类型_Scala_Implicit Conversion_Implicits - Fatal编程技术网

Scala 混合隐式解析和lambdas类型

Scala 混合隐式解析和lambdas类型,scala,implicit-conversion,implicits,Scala,Implicit Conversion,Implicits,我知道这个问题是深层编程,我的失败是因为缺乏知识。但我想知道至少如何编译这个。我需要编译器来确定我的tuple2在上下文中可以是更高级的类型 trait Extract[T[\uu],A]{ def提取物(t:t[A]):A } 对象提取{ T2型[B]={l型[X]=(X,B)} 隐式def四元组2[A,B]=新提取[T2[B]#l,A]{ 覆盖def提取(t:(A,B)):A=t.\u 1 } } def method[T[_],A](A:T[A])(隐式提取器:Extract[T,A]):

我知道这个问题是深层编程,我的失败是因为缺乏知识。但我想知道至少如何编译这个。我需要编译器来确定我的tuple2在上下文中可以是更高级的类型

trait Extract[T[\uu],A]{
def提取物(t:t[A]):A
}
对象提取{
T2型[B]={l型[X]=(X,B)}
隐式def四元组2[A,B]=新提取[T2[B]#l,A]{
覆盖def提取(t:(A,B)):A=t.\u 1
}
}
def method[T[_],A](A:T[A])(隐式提取器:Extract[T,A]):A=extractor.Extract(A)
方法[Extract.T2[String]#l,Int]((1,“hi”)//此方法有效,但没有用。
//关键是让编译器完成繁重的工作,并在
//这种情况意味着推断(X,whatever)的tuple2是上下文的T[X]

任何尽可能接近我的目标的东西都会受到赞赏。我也知道Shapless有一个专门的图书馆。但是让我们假设不存在shapeless来解决我的问题

编译器无法知道您是想要
类型T[X]=Tuple2[X,A]
还是
T[X]=Tuple2[X,A]
,因此它甚至在查看隐式参数之前就放弃了。您使用隐式的方法是正确的,除了在本例中,您甚至不需要使用lambda类型(您不需要将
Tuple2[\uu,a]
视为
t[a]
):

Open
指定要使用
Tuple2
的哪个孔:

trait Open[X, Out] {
  def open(x: X): Out
}

object Open {
  implicit def firsthole[A, B] = new Open[Tuple2[A, B], A] {
    def open(x: Tuple2[A, B]) = x._1
  }
}

我知道这个问题是深层编程

深?你什么都没看见(°你什么都没看见(°你什么都没看见(°你什么都没看见),“现在让我担心的是……)
trait Open[X, Out] {
  def open(x: X): Out
}

object Open {
  implicit def firsthole[A, B] = new Open[Tuple2[A, B], A] {
    def open(x: Tuple2[A, B]) = x._1
  }
}