2013-10-18 36 views
0

我想合併Scala中的兩個日期序列,使合併序列已排序的元素。我使用的是部分實現isBefore如下:部分應用isBefore函數在斯卡拉給出錯誤

val seq1 = Seq(LocalDate.of(2014, 4, 5), LocalDate.of(2013, 6 ,7), LocalDate.of(2014, 3, 1)) 
    val seq2 = Seq(LocalDate.of(2012, 2, 2), LocalDate.of(2015, 2, 1)) 
    var arr = (seq1 ++ seq2).sortWith(_.isBefore(_) = 1) 
    println(arr) 

但它顯示編譯錯誤的isBefore功能:

Multiple markers at this line 
- missing arguments for method isBefore in class LocalDate; follow this method with `_' if you want to 
treat it as a partially applied function 
- missing arguments for method isBefore in class LocalDate; follow this method with `_' if you want to 
treat it as a partially applied function 

我是比較新的斯卡拉。什麼似乎是問題?

回答

0

起初沒有像部分實現這樣的術語,至少我沒有聽說過這樣的,我想你的意思是部分應用,但在這種情況下沒有部分應用,部分應用是關於curried函數,編譯器在錯誤信息中試圖告訴你什麼。的這個實施例:

def test(a: String)(f: String => String) = f(a) 

val onString = test("hello world") _ 

onString(_.capitalize) 

test: (a: String)(f: String => String)String 
onString: (String => String) => String = <function1> 
res8: String = Hello world 

這是一個部分應用程序,你需要咖喱函數,該函數返回另一個功能,並將其傳遞一個參數(部分適用的話)和後者通過另一種說法。

至於你排序問題,應該工作。我不是哪個庫,你正在使用,但日期時間是相似的。我認爲問題出在(_.isBefore(_) = 1),這是非法的。應該是這樣的:

val seq1 = Seq(LocalDate.parse("2014-04-05"), LocalDate.parse("2013-06-07"), LocalDate.parse("2014-03-01")) 
val seq2 = Seq(LocalDate.parse("2012-02-02"), LocalDate.parse("2015-02-01")) 
var arr = (seq1 ++ seq2).sortWith(_.isBefore(_)) 

arr: Seq[org.joda.time.LocalDate] = List(2012-02-02, 2013-06-07, 2014-03-01, 2014-04-05, 2015-02-01)