[英]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.