scala 方法定义接受不同数字类型列表的函数

2024-01-23

我有以下问题:我有一个函数,它接受 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 (或其他常量)(如果 i sum Int 值,我必须将 s 初始化为 0 而不是 0.0。

哪种方法是让函数在 Double 和 Int 上工作的最佳方法(更少的代码)?

(我已经看到一些关于 2.8 数字特征的东西,我不太确定如何使用它......)

谢谢大家的帮助。


使用 scala 2.8 并使用数字组合进行隐式转换,您的示例可以写为:

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, 2.0, 3.0)
val l2 = List(1, 2, 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))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

scala 方法定义接受不同数字类型列表的函数 的相关文章

随机推荐

  • 将具有相同属性的两个对象的方法合并到每个属性的数组中

    我试图将两个对象的方法合并为一个对象 以便为父对象中的每个属性生成一组方法 obj1 prop1 method1 prop2 method2 obj2 prop1 method3 prop2 method4 期望的输出 obj1 prop1
  • Phonegap和Android溢出问题

    看来Android webview根本不关心overflow hidden当 div 溢出时的 css 属性 我拿了一个伟大的代码使用 HTML CSS 进行 GPU 转换的教程 http coenraets org blog 2013 0
  • System.Web.Routing.RouteCollection 和 System.Web.Mvc.RouteCollectionExtensions 都具有相同的简单名称“IgnoreRouteInternal”

    我有一个 ASP NET MVC 项目 我已经快两个月没有工作了 只要我不更改任何代码 在浏览器中调试就可以正常工作 当我修改任何代码 甚至添加空格时 我都会收到此错误 An exception of type System NotSupp
  • 如何在 UIImage 中仅显示图像的一部分?

    I have UIImageView我在其中显示 50x100 图像 我只想显示 50x50 图像的一部分 顶部 我怎样才能做到这一点 在里面移动大图像的非常简单的方法UI图像视图如下 让我们有一张大小为 100 400 的图像 代表某张图
  • 嵌入:mono 与 lua

    我有兴趣了解人们在 C C 应用程序中嵌入 mono NET 的开源实现 的经验 如何分发这样的应用程序以及依赖项是什么 我已经在 OS X 上进行了测试 mono 是一个巨大的框架 数百 MB 我的应用程序的用户都需要这个大框架吗 或者可
  • UI 存储数据的最佳方式是什么

    我正在做一个应用程序 页面上将显示多个项目 对于每个项目都会有很多信息 数据完全在 aspx cs后面的代码中生成并显示在ui中 当用户将鼠标悬停在特定项目上时 除了可见元素之外 我还需要后面代码中的一些其他信息来获取该项目 现在我正在存储
  • 响应 200 错误或响应代码作为错误代码

    所以 作为一名开发人员 我有一个非常基本的问题 休息标准我们有特定原因的 100 个错误代码 like 4xx 如果资源相关 5xx 如果服务器发生异常 还有很多 现在 当谈到实施时 我们会遇到一些情况直接返回404 as the 响应状态
  • 用 sympy 反转排列

    在什么功能sympy combinatorics permutations可以返回给定排列的逆排列吗 在 Google 中搜索不会给出结果 我可以写这个函数 但是如果这个函数已经实现了sympy 这将是不必要的 谢谢你的帮助 您正在寻找 I
  • 使用布局时在 Razor 视图和部分之前/附加注释(ASP.NET MVC 4)

    我的剃刀视图存储在数据库中并通过 VirtualPathProvider 提供给站点 给定某些标志 返回它们的服务将出于调试目的 使用 HTML 注释划分每个视图的开头和结尾 包括额外的调试信息 缓存 版本控制 作者身份等 使用布局时 只有
  • VSCode 在启动时打开特定文件

    目前是否可以在 VSCode 中设置启动时打开的特定文件 我安装了 待办任务 扩展 并且我想在每次加载 VSCode 时默认打开我的 TODO 文件 使用版本1 12 1 编辑 我认为最好的方法是使用可以在启动时运行命令的扩展 例子是 自动
  • 无法批量分配受保护的属性

    更新代码格式以便更好地查看 Folks 我已经研究这个有一段时间了 但我不明白这里可能出了什么问题 我正在使用设计 class User lt ActiveRecord Base has many addresses accepts nes
  • 如何在 Coq 简化过程中应用一次函数?

    据我了解 Coq 中的函数调用是不透明的 有时 我需要使用unfold应用它然后fold将函数定义 主体恢复为其名称 这通常很乏味 我的问题是 是否有更简单的方法来应用函数调用的特定实例 作为一个最小的例子 对于一个列表l 证明右附加 没有
  • 如何显示 MySQL 上最近执行的查询?

    是否有任何查询 方式来显示最后执行的查询ALL服务器 对于那些拥有 MySQL gt 5 1 12 的用户 您可以在运行时全局控制此选项 Execute SET GLOBAL log output TABLE Execute SET GLO
  • iOS Safari:100% 宽度固定位置标题比视口宽

    我遇到了一个特别影响 iOS 上 Safari 的问题 我正在构建一个页面 该页面具有固定位置标题 即视口的宽度 页面的内容是一系列图像 数量可变 应向右滚动 当用户滚动时 标题应保持在原位 在 iOS Safari 上 固定标题比视口稍大
  • ValueError:没有为 Tensorflow 中的任何变量提供梯度

    我正在尝试在 Tensorflow 中创建一个 dice loss 函数 我遇到了张量流的麻烦 执行以下代码 import tensorflow as tf import tensorlayer as tl def conv3d x inC
  • 为什么VIM会高亮某些单词?

    我注意到 使用不同的颜色方案 VIM 会下划线 突出显示某些单词 这是为什么以及如何将其关闭 与另一种配色方案 我在用着spf13 vim 配置 https github com spf13 spf13 vim并使用 Putty 进行远程连
  • 如何使用gradle将apk发布到Maven Central?

    我用 android studio 创建了一个 android 项目 它会生成一些apk 如何使用 gradle 将 apk 发布到 Maven Central 我可以在 apk 的工件中写什么 apply plugin maven app
  • 为什么 .NET 多行正则表达式中的 $ 不匹配 CRLF?

    我注意到以下几点 var b1 Regex IsMatch Line1 nLine2 Line1 RegexOptions Multiline true var b2 Regex IsMatch Line1 r nLine2 Line1 R
  • 为什么当函数末尾缺少 return 语句时它会起作用? [复制]

    这个问题在这里已经有答案了 我正在学习C 下面的代码让我困惑 int test return int a for int i 40 i lt 44 i if i a cout lt lt return here with i lt lt i
  • scala 方法定义接受不同数字类型列表的函数

    我有以下问题 我有一个函数 它接受 List Double 作为参数 对列表的元素执行一些算术运算 然后返回结果 我希望该函数也接受 List Int 这是一个例子 def f l List Double var s 0 0 for i l