簡體   English   中英

沒有函數參數的Scala類型類

[英]Scala typeclass without function argument

我目前正在Scala的網絡庫中工作。 我遇到了這樣的事情:

object Packet {
  trait Reader[T] {
    def read(iterator: ByteIterator): T
  }

  object Reader {
    implicit object ByteReader extends Reader[Byte] {
      def read(iterator: ByteIterator): Boolean = iterator.getByte
    }
  }
}

class Packet {
  import Packet._

  def iterator: ByteIterator

  def read[T](implicit e: Reader[T]): T = {
    e.read[T]()
  }

  def readByte(): Byte = {
    this.read[Byte]()  // <- Unspecified value parameter e
  }
}

當我在網上搜索答案時,我讀到的所有示例都是關於WITH參數的函數,而不是像我一樣,我的“ read”函數采用0參數。 這是問題嗎? 我該如何解決?

我來自C ++背景,了解Haskell的基本知識,就像類型類的東西一樣。 在C ++中,我可以進行模板專門化使其工作。 在Haskell中, (read :: Byte)將起作用。 我嘗試使用反射,但是由於數據包讀/寫是非常低級的操作,因此反射對於性能應該確實很不利。 有沒有辦法使這項工作?

在空參數列表前添加:

def read[T]()(implicit e: Reader[T]): T =
  e.read(iterator)

def readByte(): Byte =
  this.read[Byte]()  // <- HURRAY IT WORKS

在調用站點上刪除參數列表( () )也可以,但是通常不贊成這樣做,因為語法上無參數的調用被認為是參照透明的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM