scala – 当用作隐式方法参数值时,隐式值也可以是一个惰性值吗?
我有一个测试套件,它使用Slick进行数据库访问.此套件中的某些测试访问数据库而某些测试不访问.
我的套房有 隐式val db = DB.getDB 它在套件执行开始时有效地初始化DataBaseDef.然后,此值将用作某些方法的隐式参数值. override def afterAll():Unit={ db.close() super.afterAll() } 现在,如果我改为: 如果我只运行一个不使用DB的测试,那么连接将不会被初始化,并且在afterAll()中它仍会尝试关闭连接,在这种情况下我有问题,对吧?我试图运行,但没有发生错误,没有抛出异常…… 我对implicits的了解不足以帮助我理解它与懒惰相结合. 解决方法
在第一次访问该值之前,不会初始化该值.
当您访问db.close()时,它将首先初始化该值,这意味着它将在关闭连接之前调用DB.getDb.这意味着,虽然您不打算这样做,但连接仍然会被初始化然后立即关闭,因此您不会看到异常. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |