99
A
回答
132
有一些事情正在進行。
首先,Scala允許在許多方法調用中省略點和零位,所以20 seconds
相當於20.seconds()
*。
其次,應用「隱式轉換」。由於20
是Int
和Int
沒有seconds
方法,對於需要一個Int
和返回的東西,確實有一個seconds
方法,通過你的方法調用的範圍限制搜索的隱式轉換的編譯器搜索。
您已將DurationInt導入您的範圍。由於DurationInt
是一個帶有Int
參數的隱式類,因此它的構造函數定義了一個隱含的Int => DurationInt
轉換。 DurationInt
有一個seconds
方法,所以它滿足所有的搜索條件。因此,編譯器將您的呼叫重寫爲new DurationInt(20).seconds
**。
*我的意思是這個鬆散。 20.seconds()
實際上是無效的,因爲seconds
方法沒有參數列表,因此方法調用中省略的零件必須爲。
**實際上,這並不完全正確,因爲DurationInt
是一個值類,因此如果可能的話,編譯器將避免包裝整數。
6
在那裏發生的「魔術」被稱爲「隱式轉換」。您正在導入隱式轉換,其中一些處理Int(和Double)與Duration之間的轉換。那就是你正在處理的事情。
相關問題
- 1. 在VSTS中如何每5秒運行20秒webtest
- 2. List(1,2,3)如何在Scala中工作?
- 3. 佔位符如何在Scala中工作?
- 4. 泛型如何在Scala REPL中工作?
- 5. Array.toList如何在Scala中工作?
- 6. 每20秒
- 7. Scala中如何使用聚合工作?
- 8. make-kpkg不能在Fedora 20中工作
- 9. Scala中不工作
- 10. 如何在Android中運行一些代碼20秒
- 11. 如何在android中顯示額外的20秒進度條?
- 12. 如何在java中暫停當前線程20秒?
- 13. 如何在Scala插件的IntelliJ CE中使用Scala工作表中的類?
- 14. Kinect for Windows with Processing和SimpleOpenNI在Apple OSX上停止工作20秒後
- 15. sbteclipse 2.4.0不能用sbt 0.13.1和Scala 2.10.3在Fedora 20上工作XFCE
- 16. 地圖中的flatMap如何在scala中工作?
- 17. c#DbContext需要20秒
- 18. 20秒後重播.swf
- 19. 如何播放運行視頻從1秒 - 20秒在混合/ WPF
- 20. EnableQuery(MAXTOP = 20)不工作
- 21. Scala的「specs」BDD框架如何工作?
- 22. 定義類時,scala REPL如何工作?
- 23. Java和Scala如何一起工作?
- 24. scala隱式值如何工作?
- 25. Scala XML支持如何工作?
- 26. Scala的(2.8)Manifest如何工作?
- 27. 如何在20秒後用swift做動畫? animateWithDuration:delay:無用
- 28. 在毫秒QTTime工作
- 29. 內嵌燈箱在20秒後彈出
- 30. cURL在DreamHost緩慢服用~20秒
任何足夠先進的技術都難以區分魔術。 – ripper234 2013-02-27 05:32:12
幸運的是,大多數IDE都能區分它!隱式轉換在Scala中使用得相當多。如果您只是閱讀文本文件,可能會引起混淆(「這個方法從哪裏來」),但有了適當的工具支持,您應該能夠找到解決方法,在這一點上,Scala可以非常有意義且簡潔。 (例如,如果您發現自己使用了implicits,那麼總是問問自己是否有一種方法可以使用(例如,20.seconds比'new DurationInt(20).seconds()'更具可讀性) – 2013-02-27 06:56:17
在沒有他們的幫助下實現同樣的目標 http://twitter.github.com/effectivescala/#Types and Generics-Implicits – oluies 2013-02-27 08:13:51