我正在尝试在Scala中合并两个日期序列,以便合并的序列具有已排序的元素。我正在使用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
我对Scala比较陌生。什么似乎是问题?
答案 0 :(得分: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
这是一个部分应用程序,你接受一个curried函数,它返回另一个函数并传递一个参数(部分应用它),后者传递另一个参数。
至于你排序问题,那应该有用。我不知道你使用的是哪个库,但与日期时间相似。我认为问题在于作业(_.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)