【发布时间】:2018-11-01 00:48:27
【问题描述】:
以下函数计算 Scala 中两个 2D 点之间的欧几里得距离:
def euclideanDist(pt1: List[Double], pt2: List[Double]): Double =
sqrt(pow(pt1(0)-pt2(0), 2)+pow(pt1(1)-pt2(1), 2))
我想设计一个周界函数来累积点列表(或 ListBuffer)中每个连续点之间的距离。
例如
val arr:ListBuffer[List[Double]] = ListBuffer(List(0, 0), List(0,1), List(1,1), List(1,0), List(0, 0))
perimeter(arr)
应该给出输出为 4。
这是我尝试过的:
def perimeter(arr: ListBuffer[List[Double]]): Double =
arr.reduceLeft(euclideanDist)
在执行时,编译器会抛出此错误
Name: Unknown Error
Message: <console>:43: error: type mismatch;
found : (List[Double], List[Double]) => Double
required: (Any, List[Double]) => Any
arr.reduceLeft(euclideanDist)
^
<console>:43: error: type mismatch;
found : Any
required: Double
arr.reduceLeft(euclideanDist)
^
StackTrace:
我可以使用 for 循环来完成整个事情,但想知道这是否可以通过 Scala 方式更简单地解决。
【问题讨论】:
-
不是
def perimeter(ListBuffer[List[Double]]: arr)应该是def perimeter(arr: ListBuffer[List[Double]])? -
@RameshMaharjan:是的。在 SO 中重构时犯了一个错误。刚刚做了编辑。 (虽然错误仍然相同:))