新手斯卡拉问题:
假设我想在Scala中执行此操作[Java代码]:
public static double[] abs(double[] r, double[] im) {
double t[] = new double[r.length];
for (int i = 0; i < t.length; ++i) {
t[i] = Math.sqrt(r[i] * r[i] + im[i] * im[i]);
}
return t;
}
Run Code Online (Sandbox Code Playgroud)
并且它也是通用的(因为Scala有效地完成了我读过的通用基元).仅依靠核心语言(没有库对象/类,方法等),如何做到这一点?说实话,我根本看不出怎么做,所以我猜这只是一个纯粹的奖励点问题.
我遇到了很多问题,试图做这个简单的事情,我现在放弃了Scala.希望一旦我看到斯卡拉的方式,我将有一个'啊哈'的时刻.
更新:与其他人讨论这个问题,这是我迄今为止找到的最佳答案.
def abs[T](r: Iterable[T], im: Iterable[T])(implicit n: Numeric[T]) = {
import n.mkNumericOps
r zip(im) map(t => math.sqrt((t._1 * t._1 + t._2 * t._2).toDouble))
}
Run Code Online (Sandbox Code Playgroud) scala ×1