2011-10-15 37 views
7

有沒有辦法在scala對象中隱式添加方法?隱式添加對象方法

UPD: 例如,未過濾的Scala庫具有單獨的對象Body其中包含方法Body.string(req: HttpRequest)Body.bytes(req: HttpRequest)和用於讀的身體從http請求。所以,我想在我的域對象中讀取正文,如Body.cars(req:HttpRequest)

+0

請更好地解釋你想要什麼。 –

回答

15
import scala.language.implicitConversions 

object ObjA 

object ObjB { 
    def x = 1 
} 

object Main { 
    implicit def fromObjA(objA: ObjA.type) = ObjB 

    def main(args: Array[String]): Unit = { 
     println(ObjA.x) 
    } 
} 
+0

這是我需要的。謝謝。 – KkZz

+1

我沒有得到它...這是整個源文件嗎?像ObjB.scala?或者這是某些方法實現的一部分?我試圖把這只是在我的代碼,它沒有工作... –

+0

@EduardoBezerra我更新了與2.11.7工作的答案,但我現在不使用Scala,所以任何建議,歡迎。 – elbowich

11

你是什麼意思隱式添加方法?這段代碼剪斷回答你的問題:

implicit def toFunkyString(s: String) = new { 
    def reverseUpper = s.reverse.toUpperCase 
} 

"Foo".reverseUpper //yields 'OOF' 
toFunkyString("Foo").reverseUpper //explicit invocation 
+1

'「Foo」'是一個類實例,我的意思是在單例對象中添加方法,如'Math.myMethod(1)'。這一切都一樣嗎? – KkZz