2010-05-18 14 views
11

我正在尋找類似於JodaTime或JSR 310的Scala,它利用了諸如運算符重載等很好的Scala特性,並且不依賴於隱式轉換(我對隱式轉換有非理性擔心)。是否有適合Scala的日期/時間API?

我知道http://github.com/jorgeortiz85/scala-time,但它只是pimps JodaTime與implicits。

+0

你在尋找的東西它提供<, >運營商? – 2010-05-18 11:33:29

+4

我建議你擺脫對隱式轉換的非理性恐懼。 ;-) – Jesper 2010-05-18 12:30:43

+0

@Timo - 我想要比較操作,以及諸如+和減號之類的東西。 @Jesper - 恐懼並非完全不合理。 Implicits的性能受到打擊。他們可以引發與平等之類的奇怪的互動。他們依賴於類型推理,並且我發現混合了很多依賴類型推斷的東西是絕對混淆的好方法。 – 2010-05-18 12:49:18

回答

3

隱式轉換沒有任何問題。即使Java庫沒有用於底層邏輯,任何明智設計的純Scala庫仍然會使用implicits,從而允許您編寫表達式,如5.days + 3.minutes

不是所有的implicits都是相等的,隱式轉換成完全控制的特定類型幾乎肯定是安全的。

正如其他人已經指出的那樣,這種轉換在大多數情況下都會得到優化,特別是在開啓逃生分析的情況下,所以不要讓他們擔心!

在JSR 310完成之前,joda-time是最好的選擇。

除了需要遵循Java命名約定和缺少操作符重載之外,joda-time已經非常適合慣用Scala。這個設計本質上是非常實用的,尤其是它包含不可變性的方式,所以scalaj-time實際上只是圖書館的一個非常薄的包裝。

您還可以獲得scalaj-time可以輕鬆升級到可用時使用JSR 310的好處,因此當時遷移您的代碼將更加痛苦。

2.8以來,斯卡拉時已更名scalaj時間:http://github.com/scalaj/scalaj-time

+1

我可以想象,從Scala的JodaTime包裝器移植到Scala的JSR310包裝器將比直接(或用Java)使用這些東西的痛苦少得多。如果更改導出並修復某些類名稱就足夠了,將會很有趣:-) – soc 2010-09-14 14:49:31

+0

隱式轉換會在包裝所做的上面添加一個半隱藏的間接層。這增加了複雜性和運行時間開銷。他們作爲一項功能沒有任何問題,但偶爾會以無故的方式使用它們。 – 2010-09-15 11:30:53

+0

將裸體整數轉換爲幾分鐘是否無償? – 2010-09-15 13:12:24

相關問題