gpt4 book ai didi

scala - scala 中的 "implictly"现在是否已弃用或至少不再需要?

转载 作者:行者123 更新时间:2023-12-03 18:30:26 25 4
gpt4 key购买 nike

检查 fs2 教程,我偶然发现了以下代码

def client[F[_]: MonadCancelThrow: Console: Network]: F[Unit] =
Network[F].client(SocketAddress(host"localhost", port"5555")).use { socket =>
socket.write(Chunk.array("Hello, world!".getBytes)) >>
socket.read(8192).flatMap { response =>
Console[F].println(s"Response: $response")
}
}
在哪里
Network[F].client
感觉很奇怪,因为我通常不会写
implictly[Network[F]].client
所以我检查了代码并且它可以工作和编译,所以它一定是隐式不再需要了。我想知道从什么时候开始?它会被弃用吗?有人可以分享 scala 发行说明的链接或说明这一点的东西吗?

最佳答案

这只是许多图书馆遵循的约定:if FooBar[K]是一些类型类,那么通常定义一个 apply伴随对象上的方法,其签名看起来有点像这样:

object FooBar {
def apply[K](implicit ev: FooBar[K]): FooBar[K] = ev
}
或者(如果想要更精确的类型,特别是如果想要 have access to type members of ev ),像这样:
object FooBar {
def apply[K](implicit ev: FooBar[K]): ev.type = ev
}
从而允许写下与表达式类型完全相同的值级表达式:
FooBar[K]: FooBar[K] // desugars into FooBar.apply[F](<implicit instance>)
这是 Network 中的此方法( link to github ,评论是我的):
def apply[F[_]](implicit F: Network[F]): F.type = F
// ^--- type-constructor
// ^--- value
// ^--- type-constructor
// ^--- value
// ^--- value
该约定独立于 implicitly 并且几乎不受其影响。/ summon Scala 3 中的更改。

关于scala - scala 中的 "implictly"现在是否已弃用或至少不再需要?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67382395/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com