scala - 当超过 1 个实例可用时,Scala 中的隐式解析
问题描述
我有以下特点:
trait Close[T]{
def close(t: T): Unit
}
object Close {
final class CloseOps[T](t: T, c: Close[T]){
def close(): Unit = c.close(t)
}
implicit def toCloseOps[T](t: T)(implicit c: Close[T]) = new CloseOps[T](t, c)
}
及其实例:
implicit val closeInputStream: Close[InputStream] = (t: InputStream) => t.close()
implicit def noOpClose[T]: Close[T] = _ => ()
我的误解是,如果我同时导入implicit
上面列出的两个,我会使用更具体的一个。我是说方法
def someMethod[T](t: T)(implicit c: Close[T]){
t.close()
}
及其用法
import Close._
val is: InputStream = new InputStream{
override def read() = -1
override def close() = throw new RuntimeException()
}
someMethod(is) //throws RuntimeException
那么假设在这种情况closeInputStream
下将使用 instance 的实例而不是 ,这是否可靠noOpClose[InputStream]
?或者提供某种后备隐式实例是否常见?他们两个是匹配的。
解决方案
推荐阅读
- postgresql - Postgres 查询在 30 秒后超时
- javascript - 如何简单地让我的脚本可以访问我的 JSON 数据?
- flutter - 我怎样才能让铃声通知图标在颤动中动画化
- java - 如何创建用于将 http 标头转换为自定义 dto 的拦截器?
- archlinux - 如何为 xz 归档器设置默认参数?
- flutter - http.post在flutter中返回307错误代码
- react-native - 如何通过点击按钮更改输入文本上的变量?反应原生
- javascript - JSON在HTML中抛出未定义
- java - Optional.ofNullable() 中的空指针异常
- python - 我们如何在 python 中映射数据结构?