scala – 使用其他隐式参数实现traits方法
发布时间:2020-12-16 18:52:07 所属栏目:安全 来源:网络整理
导读:我想要一个对象来实现特征Iterable并将另一个隐式参数传递给实现的方法: object MyRepository extends Iterable[Something] { def iterator(implict entityManager: EntityManager): Iterator[Something] = ...} 显然这不起作用,因为迭代器方法没有隐式参数
我想要一个对象来实现特征Iterable并将另一个隐式参数传递给实现的方法:
object MyRepository extends Iterable[Something] { def iterator(implict entityManager: EntityManager): Iterator[Something] = ... } 显然这不起作用,因为迭代器方法没有隐式参数,因此没有通过上面显示的方法实现. 一个示例用例是我想要应用于存储库值的map方法: def get = Action { Transaction { implicit EntityManager => val result = MyRepository.map(s => s ...) } } 有没有办法实现Iterable特性并捕获隐式pramameter? 解决方法
鉴于Iterable.iterator在其签名中没有隐含的内容,您不能指望在添加此隐式时能够实现此方法:这将是另一种方法(特别是另一种重载).
但是,如果MyRepository是一个类而不是一个对象,则可以捕获类构造函数中的隐式. 这是一个例子: object MyRepository { class MyRepositoryIterable(implicit entityManager: EntityManager) extends Iterable[Something] { def iterator: Iterator[Something] = ??? } implicit def toIterable(rep: MyRepository.type)(implicit entityManager: EntityManager): MyRepositoryIterable = new MyRepositoryIterable } 现在当您执行MyRepository.map(…)时发生的事情是该对象被隐式转换为MyRepositoryIterable实例,该实例捕获隐式EntityManager值. MyRepositoryIterable是实际实现Iterable的类. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |