scala方法定义函数接受不同数字类型的List
发布时间:2020-12-16 18:59:53 所属栏目:安全 来源:网络整理
导读:我有以下问题:我有一个函数,它以List [Double]作为参数,对列表的元素执行一些算术运算,然后返回结果.我希望该函数也接受List [Int].这是一个例子: def f(l: List[Double]) = { var s = 0.0 for (i - l) s += i s}val l1 = List(1.0,2.0,3.0)val l2 = List(
我有以下问题:我有一个函数,它以List [Double]作为参数,对列表的元素执行一些算术运算,然后返回结果.我希望该函数也接受List [Int].这是一个例子:
def f(l: List[Double]) = { var s = 0.0 for (i <- l) s += i s } val l1 = List(1.0,2.0,3.0) val l2 = List(1,2,3) println(f(l1)) println(f(l2)) 当然第二个println失败,因为f需要List [Double]而不是List [Int]. 还要注意f函数中和的非scala样式公式,以证明需要在函数本身内使用0(或其他常量)(如果我将Int值与init s s相加而不是0.0. 哪个是使函数在Double和Int上运行的最佳方法(更少的代码)? (我已经看到一些关于2.8数字特性的东西,我不太确定如何使用它……) 谢谢大家的帮助. 解决方法
使用scala 2.8并使用Numeric combine进行隐式转换,您的示例可以写为:
import Numeric._ def f[T](l: List[T])(implicit n: Numeric[T]):T = { var s = n.zero for (i <- l) s = n.plus(s,i) s } val l1 = List(1.0,3) println(f(l1)) println(f(l2)) //or def f2[T](l: List[T])(implicit n: Numeric[T]):T = { import n._ var s = zero for (i <- l) s += i s } println(f2(l1)) println(f2(l2)) 现在是另一个以更加scala方式进行求和的示例: def sum[T](l:List[T])(implicit n: Numeric[T]):T = { import n._ l.foldLeft(zero)(_ + _) } println(sum(l1)) println(sum(l2)) //or since 2.8 Seq include already a sum function def sum[T](l:List[T])(implicit n: Numeric[T]):T = l.sum println(sum(l1)) println(sum(l2)) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- Karma Testing Angular Seed Project System.JS路径错误
- 如何将Scala.collection.jcl的Scala 2.7.7代码移植到Scala
- 【EJB系列】(五)——EJB与WebService
- springcloud-config client配置文件为什么要用bootstrap命名
- scala – List [String]没有来自cats的成员遍历
- bash – Jenkins文本参数 – 特殊字符乱码(不需要的变量替换
- AngularJS修改model值时,显示内容不变
- bash – 如何在每行输入中找到唯一字符?
- Bash 常用命令
- AngularJS路由在PhoneGap中无法正常工作