[英]How to access an implicit conversion defined a class (in Scala)?
我有一個像這樣的抽象類:
abstract class Base {
val myInners = mutable.ArrayBuffer[Inner[Any]]()
abstract class Inner[+T] {
myInners += this
def get: T
// other functionality here
}
implicit def innerToValue[T](inner: Inner[T]) = inner.get
class IntInner extends Inner[Int] { ... }
class StringInner extends Inner[String] { ... }
...
}
最初我有一個單例對象,例如
object MyObject extends Base {
val intVal = new IntInner()
val stringVal = new StringInner()
...
}
而且我能夠在其他地方使用這些對象成員,例如functionThatExpectsAnInteger(MyObject.intVal)
,這讓我很高興:)。
但是,為了提高可測試性,我想將此object
制成一個class
並在使用該object
任何地方注入class
的實例。 但是,通過將MyObject
為類,無論嘗試了什么,我似乎都無法再使用此隱式轉換,這讓我很傷心:(。
當然,這種轉換不僅節省了我在呼喚一個get
方法,我可以生活離不開它,但我仍然在學習關於斯卡拉implicits,我想知道為什么,這並不工作,如果有一種方法可以做到這個。
您的隱式內容有些奇怪,但是我認為這只是一個示例,因此我不打算贅述。
我之所以不這樣做,是因為如果在隨行對象的范圍內,編譯器會查找隱式對象。 如果將其轉換為類,則必須首先將其導入。 一種實現方式如下:
val obj = new MyObject()
import obj.innerToValue
val x : Int = obj.intVal
我敢肯定這可以做得更好,但只能通過整體上更改代碼的結構來完成。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.