Kode berikut harus typecheck afaik, tetapi tidak. Saya lebih suka menghindari memberi nama pada tipe argumen karena itu dapat berubah dalam arity dan tipe.

trait Foobar[K] {
     def method: K => Double
}
class Test extends Foobar[(String, Int, Boolean)] {
     override def method: (String, Int, Boolean) => Double = (_, _, _) => 3.0
      // This also fails
     // override def method: (String, Int, Boolean) => Double = { case (_, _, _) => 3.0 }
}

Kesalahannya adalah

mengesampingkan metode metode dalam sifat Foobar tipe => ((String, Int, Boolean) => Ganda; metode metode memiliki tipe yang tidak kompatibel ganti metode def: (String, Int, Boolean) => Double = (,,_) => 3.0

2
rausted 23 April 2020, 01:52

1 menjawab

Jawaban Terbaik

Ini adalah masalah yang sangat sepele tapi sangat membosankan.

(String, Int, Boolean) => Double. adalah fungsi dari tiga argumen ke ganda.
Tetapi Anda ingin fungsi dari satu argumen (sebuah tupel dari tiga elemen) menjadi ganda.

Coba dengan:

class Test extends Foobar[(String, Int, Boolean)] {
  override def method: ((String, Int, Boolean)) => Double = {
    case (_, _, _) => 3.0
  }
}
3
Luis Miguel Mejía Suárez 23 April 2020, 12:43