Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我是Scala新手,想知道这个函数是如何工作的_Scala - Fatal编程技术网

我是Scala新手,想知道这个函数是如何工作的

我是Scala新手,想知道这个函数是如何工作的,scala,Scala,我试图用C或JavaScript或Java编程语言实现一种称为连接扫描算法的算法,并发现了这个Scala实现: 我希望我的实现基于 首先,这里是类型 class Stop(id: Int, name: String) class StopTime(tripId: Int, arrivalTime: Long, departureTime: Long, stopId: Int, stopSequence: Int) class Trip(routeId: Int, serviceId: Int,

我试图用C或JavaScript或Java编程语言实现一种称为连接扫描算法的算法,并发现了这个Scala实现: 我希望我的实现基于

首先,这里是类型

class Stop(id: Int, name: String)
class StopTime(tripId: Int, arrivalTime: Long, departureTime: Long, stopId: Int, stopSequence: Int)
class Trip(routeId: Int, serviceId: Int, id: Int, tripHeadsign: String)
我试图理解这个函数在做什么

它可以从以下位置调用:

我想知道的是: 第一段代码中的from、to和rest,我认为from是数组中的第一个元素,to是数组中的第二个元素,rest是没有from或to的其余元素。这是正确的吗

当递归调用makeConnectionsFromStops时,to::rest包含什么,它在做什么

最后一行代码在做什么

有些人可以用Java或JavaScript进行伪实现,这样我就可以理解了,因为我是Scala新手


感谢您阅读本文。

我将尝试回答您的问题,我不是以英语为母语的人,所以我希望一切都清楚:

是的,from是第一个元素,to是第二个元素,其余元素是列表的尾部

to::rest应该是一个以to为头、rest为尾的列表

要理解最后一行,我想你说的是case=>Nil,你必须理解模式匹配是如何工作的。粗略地说,如果timedStops是一个至少包含两个元素from和to的列表,则调用TripConnection部分。否则,函数将向Nil元素返回一个结束递归的空列表


我不知道我们是否可以就课程提供建议如果我们不能,请让我温和一点,但我建议您在coursera上学习Scala课程中的函数编程原理。如果你想在Scala有一个良好的开端,这是最好的选择之一,而且它是免费的。

请不要垃圾邮件无关的标签!您好,我在这里找到了另一个函数:。C是一个类型参数。
private def sinceEpoch(date: LocalDateTime, time: Long): Long = {
    epoch.until(date, ChronoUnit.MINUTES) + time
}

private def makeConnectionsFromStops(trip: Trip, date: LocalDateTime)(timedStops: List[StopTime]): List[TripConnection] = timedStops match {
  case from :: to :: rest =>
    TripConnection(
      from.stopId,
      to.stopId,
      sinceEpoch(date, from.departureTime),
      sinceEpoch(date, to.arrivalTime), trip.id
    ) :: makeConnectionsFromStops(trip, date)(to :: rest)
  case _ => Nil
}
// Lets assume thats this is full of objects
val associatedTrips: List[Trip] = List[Trip]()

val timestamp = LocalDateTime()

associatedTrips flatMap {
  trip => stopTimes.get(trip.id) map makeConnectionsFromStops(trip, timestamp) getOrElse Nil
}