0

これを編集して、@Zhi Yuan Wang が回答した質問のより単純な形式にしました。

object ContBound { 
  def f2[A: Seq, B: Seq]: Unit = {
      val a1: Seq[A] = evidence$1
      val b2: Seq[B] = evidence$2 
     }

  def f3[A: Seq, B: Seq, C: Seq]: Unit = {
    val a1: Seq[A] = evidence$1
    val b2: Seq[B] = evidence$2
    val a3: Seq[C] = evidence$3      
  }   
}

次のエラーが表示されます。

not found value evidence$1
not found value evidence$2
type mismatch; found :Seq[A] required: Seq[C]

REPLで次を取得しているにもかかわらず:

 def f3[A: Seq, B: Seq, C: Seq]: Unit =
 |    {
 |       val a1: Seq[A] = evidence$1
 |       val b2: Seq[B] = evidence$2
 |       val a3: Seq[C] = evidence$3      
 |    }  
f3: [A, B, C](implicit evidence$1: Seq[A], implicit evidence$2: Seq[B], implicit evidence$3: Seq[C])Unit

Zhiのawserは正しいです。以下がコンパイルされます。

object ContBound { 
  def f2[A: Seq, B: Seq]: Unit = {
    val a1: Seq[A] = evidence$1
    val b2: Seq[B] = evidence$2 
  }

  def f3[A: Seq, B: Seq, C: Seq]: Unit = {
    val a1: Seq[A] = evidence$3
    val b2: Seq[B] = evidence$4
    val a3: Seq[C] = evidence$5      
  }   
}

ただし、これらは2つの異なるメソッドのパラメーターであり、メソッドは通常パラメーター名を再利用できるため、これはまだ正しい動作とは言えません。

4

1 に答える 1

2

やってみました

def comma3[A: RParse, B: RParse, C: RParse, D](f: (A, B, C) => D): D =
    expr match {
       case CommaExpr(Seq(e1, e2, e3)) =>
           f(evidence$3.get(e1), evidence$4.get(e2), evidence$5.get(e3))
}

証拠$1がすでに使用されているので

def comma3[]??
于 2016-08-25T13:38:16.607 に答える