Saya membaca bagian ini dokumentasi Akka HTTP

Di subbagian tentang tajuk khusus, ada cuplikan kode berikut:

final class ApiTokenHeader(token: String) extends ModeledCustomHeader[ApiTokenHeader] {
  override def renderInRequests = false
  override def renderInResponses = false
  override val companion = ApiTokenHeader
  override def value: String = token
}
object ApiTokenHeader extends ModeledCustomHeaderCompanion[ApiTokenHeader] {
  override val name = "apiKey"
  override def parse(value: String) = Try(new ApiTokenHeader(value))
}

Dan

val ApiTokenHeader(t1) = ApiTokenHeader("token")
t1 should ===("token")

Saya percaya bahwa ApiTokenHeader harus berupa case class alih-alih class agar deklarasi nilai tersebut dengan pengikatan menjadi valid: val ApiTokenHeader(t1) = ApiTokenHeader("token")

Apakah ini benar atau saya kehilangan beberapa pengetahuan?

0
Alexander Arendar 14 Desember 2017, 16:15

1 menjawab

Jawaban Terbaik

Dokumentasinya benar. Alasan ApiTokenHeader dalam contoh berfungsi seperti yang ditunjukkan adalah karena ia memperluas ModeledCustomHeader dan objek pendampingnya memperluas ModeledCustomHeaderCompanion. Implementasi ModeledCustomHeader dan ModeledCustomHeaderCompanion mengaktifkan sintaks dalam contoh.

Dari Scaladoc untuk ModeledCustomHeader:

Kelas dukungan untuk membuat header kustom yang ditentukan pengguna yang ditentukan dengan mengimplementasikan nama dan nilai. Dengan menerapkan ModeledCustomHeader alih-alih CustomHeader secara langsung, semua metode unapply yang diperlukan disediakan untuk kelas ini, sehingga dapat dicocokkan pola dari RawHeader dan sebaliknya demikian juga.

Dari Scaladoc untuk ModeledCustomHeaderCompanion:

Untuk diperluas oleh objek pendamping dari tajuk khusus yang memperluas ModeledCustomHeader. Menerapkan metode apply dan unapply yang diperlukan untuk membuat header yang ditentukan tersebut terasa "asli".

Anda dapat memeriksa kode sumber untuk keduanya di sini dan ModeledCustomHeaderSpec (yang menggunakan ApiTokenHeader) di sini.

1
Jeffrey Chung 14 Desember 2017, 14:04