传递所有适用类型的函数

2023-11-21

我遵循了发现的建议here定义一个名为 square 的函数,然后尝试将其传递给一个名为两次的函数。函数定义如下:

 def square[T](n: T)(implicit numeric: Numeric[T]): T = numeric.times(n, n)
 def twice[T](f: (T) => T, a: T): T = f(f(a)) 

当调用两次(square, 2)时,REPL会输出一条错误消息:

scala> twice(square, 2)
<console>:8: error: could not find implicit value for parameter numeric: Numeric[T]
       twice(square, 2)
         ^

Anyone?


我不同意这里所有人的观点,除了安德鲁·菲利普斯。嗯,到目前为止大家都这样。 :-) 问题就在这里:

def twice[T](f: (T) => T, a: T): T = f(f(a))

您期望 Scala 的编译器能够考虑到,就像 Scala 新手经常做的那样both参数为twice推断正确的类型。但 Scala 并没有这样做——它只使用从一个参数列表到下一个参数列表的信息,而不是从一个参数到下一个参数的信息。这意味着参数f and a独立分析,不具有了解对方是什么的优势。

这意味着,例如,this works:

twice(square[Int], 2)

现在,如果您将其分解为两个参数列表,那么它也可以工作:

def twice[T](a: T)(f: (T) => T): T = f(f(a))
twice(2)(square)

所以,基本上,你尝试做的一切都是正确的并且应该有效,except对于您期望一个参数帮助确定另一个参数的类型的部分(如您所写)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

传递所有适用类型的函数 的相关文章

  • Scala:如何将可变参数指定为类型?

    代替 def foo configuration String String 我希望能够写 type Configuration String String def foo configuration Configuration 主要用例是
  • 可选择将项目添加到 Scala 映射

    我正在寻找这个问题的惯用解决方案 我正在构建一个valScala 不可变 Map 并希望有选择地添加一项或多项 val aMap Map key1 gt value1 key2 gt value2 if condition key3 gt
  • 对两种类型之间的二元关系进行建模

    有企业 也有人 用户可以对某个企业点赞或发表评论 但效果是一样的can not发生在一个人身上 当用户发布有关某个企业的内容或对其点赞时 该企业就被称为target喜欢或帖子 trait TargetingRelation Targetin
  • 在 Spark MLlib 上使用 Java 中的 Breeze

    在尝试从Java使用MLlib时 使用微风矩阵运算的正确方法是什么 例如scala 中的乘法很简单 matrix vector 相应的功能在Java中是如何表达的 有一些方法 例如 colon times 可以通过正确的方式调用 breez
  • 如何使用 Spark 2 屏蔽列?

    我有一些表 我需要屏蔽其中的一些列 要屏蔽的列因表而异 我正在读取这些列application conf file 例如 对于员工表如下所示 id name age address 1 abcd 21 India 2 qazx 42 Ger
  • Scala:什么是 CompactBuffer?

    我试图弄清楚 CompactBuffer 的含义 和迭代器一样吗 请解释其中的差异 根据 Spark 的文档 它是 ArrayBuffer 的替代方案 可以提供更好的性能 因为它分配的内存更少 以下是 CompactBuffer 类文档的摘
  • 为什么用scala写的代码比用java写的慢6倍?

    我不确定我在编写 scala 代码时是否犯了一些错误 问题是 The four adjacent digits in the 1000 digit number that have the greatest product are 9 9
  • 如何在映射中将字符串转换为 Seq[String]

    我有一个Map String String 以及需要的第三方功能Map String Seq String 有没有一种简单的方法来转换它 以便我可以将地图传递给函数 original mapValues Seq 注意mapValues返回地
  • 如何在 scala repl 和 sbt 控制台中关闭/打开 typer 阶段

    是否可以在不退出当前会话的情况下切换阶段 我尝试进入 power 模式 但它仍然不打印类型 在SBT中只需添加以下设置 set scalacOptions in Compile console Xprint typer 在 REPL 中你可
  • 如何执行仅匹配正则表达式的测试?

    在 sbt 0 10 1 中 我经常使用test only缩小我的测试数量 sbt gt test only com example MySpec 但是 我想缩小范围 以便只运行名称 描述与正则表达式匹配的测试 是否有一些语法可以实现这样的
  • 获取SettingKey[T]的值

    我正在开发一个用于文档生成的插件 我想将所有生成的文件输出到我选择的目录中 该目录可以是SBT的子目录target目录 如下 val newTargetDirectory SettingKey File document target di
  • 将 Tuple2 的值部分(即映射)合并为按 Tuple2 的键分组的单个映射

    我在 Scala 和 Spark 中这样做 我有和Dataset of Tuple2 as Dataset String Map String String 下面是值的示例Dataset A 1 gt 100 2 gt 200 3 gt 1
  • Spark 2.2 无法将 df 写入 parquet

    我正在构建一个聚类算法 我需要存储模型以供将来加载 我有一个具有以下架构的数据框 val schema new StructType add StructField uniqueId LongType add StructField tim
  • 如何将 Java 地图转换为在 Scala 中使用?

    我正在开发一个 Scala 程序 该程序调用 Java 库中的函数 处理结果并生成 CSV 有问题的 Java 函数如下所示 Map
  • Scala:类型参数中的问号

    我试图理解以下代码 来自 Scalaz 库 def kleisliIdApplicative R Applicative Kleisli Id R 我假设一种形式T P0 是一个带有参数的类型构造函数 但是我无法找到解释类型参数中问号用法的
  • 在 scala 宏中使用 LabelDef (2.10)

    我正在尝试 scala 2 10 宏功能 我使用时遇到问题LabelDef但在某些情况下 在某种程度上 我偷看了编译器的代码 阅读了摘录米格尔 加西亚的论文 http lampwww epfl ch magarcia但我还是卡住了 如果我的
  • 实现只有一个居民的类型的价值

    感谢 MilesSabin 的answer https stackoverflow com a 32157259 867671我可以编写类型级别的斐波那契序列 sealed trait Digit case object Zero exte
  • 将下划线分配给变量。下划线是做什么的?

    最近我遇到了这样的代码 var myVariable variableKind 这似乎是一种分配方式null to myVariable 谁能解释一下背后的理由 在这种情况下 分配之间有什么区别 and null到一个变量 它使用默认值初始
  • 解决 sbt 中 jar 加载冲突的问题

    当两个特定的 sbt 插件启动时 我在 sbt 启动时收到以下错误加在一起到其构建定义中的项目 这些 sbt 插件之一是规模化jdbc https github com scalikejdbc scalikejdbc另一个是my own h
  • Python 相当于 Scala 案例类

    Python 中是否有与 Scala 的 Case Class 等效的东西 就像自动生成分配给字段而无需编写样板的构造函数一样 当前执行此操作的现代方法 从 Python 3 7 开始 是使用数据类 https www python org

随机推荐

  • python中监听端口并捕获数据

    我正在使用 C 语言的应用程序 它将连续数据发送到指定端口 我可以使用 Putty 使用 telnet 127 0 0 1 端口 30003 查看传入数据 现在我想捕获该数据进行处理 请建议如何在 python 中做到这一点 数据以每秒 5
  • iOS 临时文件夹位置

    我的应用程序刚刚被 Apple 拒绝 因为它在文档目录中存储临时或缓存文件 正确的 他们的拒绝消息指出 您的应用程序使用的临时文件应仅存储在 tmp目录 我想除了文件 and Library在应用程序的文件夹中 我现在正在尝试在iPhone
  • ASP.NET MVC 将强类型数据传递到母版页

    复制 在 ASP NET MVC 中将数据传递到母版页 ASP NET 母版页应该从视图中获取数据吗 我一直遵循这种方法将公共数据传递到 site master 然而 这确实需要对 ViewData 进行特定的转换 而且我不喜欢到处使用字符
  • 在 moment.js fromNow() 或 from() 中使用时区

    我想向用户展示自他们执行操作以来已经过去了多长时间 发生操作的日期 时间存储在服务器上 采用服务器的时区 这就是造成问题的原因 因为如果用户计算机的时区比服务器时区早 12 小时 那么如果用户现在添加某些内容 moment js 将显示 1
  • 如何在 Delphi IDE 中更快地创建自动属性?

    我需要创建和管理许多简单的已发布属性 如果它们看起来像这样 我称它们为自动属性 private FTitle string published property Title string read FTitle write FTitle 通
  • 选择多个数组元素

    PHP 有没有办法一次选择多个数组元素 例如这样在 for 循环中 i 要选择的第一个集合的大小 然后后续增量表示从数组中选择该大小的下一组 Thanks IE 而不是一次只循环一个数组元素 而是循环遍历选定的对 例如 3 个元素 然后对这
  • 自制安装 - sudo?

    我正在尝试在我的终端中安装 Homebrew 它首先要求我输入密码 我用来登录计算机的密码 然后按 Enter 键 然后它会出现 在 macOS 上需要 sudo 访问权限 这是什么意思 我已经是管理员 据我所知 因为这是我的个人笔记本电脑
  • 如何同步两个CoordinatorLayout + AppBarLayout的滚动

    我有一个关于 XML 的活动 就像是
  • 如何减少 GridLayout 中 JCheckbox 之间的空间

    我有三个JavaJCheckboxes在一列中 通过设置容器的布局来排列JPanel to GridLayout 3 1 1 1 当我运行程序时 JCheckBox 之间的垂直空间太大 它看起来超过1个像素 由于我已经将布局中 JCheck
  • Laravel 排序关系

    如何使用相关表格对结果进行排序 我有这个表 Clients and Managers 用户表 客户端 php
  • 链接的 ViewScoped beans 导致内存泄漏

    在 JBoss 7 1 1 上的 JavaEE6 项目 EJB3 JSF2 中 ViewScoped beans 似乎存在内存泄漏 最近几天我花了时间调查这个问题 因此 我创建了包含两个页面的简单项目 以保证在第一页离开 ViewScope
  • OpenCV如何平滑轮廓、降低噪声

    I extracted the contours of an image that you can see here However it has some noise How can I smooth the noise I did a
  • 是否可以检测应用程序的退出?

    我的 Android 应用程序允许从此启动其他已安装的应用程序 这显示了一些允许的应用程序 如果用户尝试启动不允许的应用程序 则显示一条消息并使用正在运行的任务返回到我的活动 从每个应用程序启动的位置 我的应用程序充当家庭启动器 因此 如果
  • Windows 事件查看器锁定了我的 EXE 文件

    我对某件事很好奇 我正在开发一个 Windows 服务并将所有诊断事件记录到 Windows 事件日志中 因此 当服务运行时 我打开事件查看器 从管理工具 来查看服务运行的结果 除了当我需要卸载程序时 再次出于测试目的 这非常有效 出于某种
  • 是否使用辅助角色或 Web 角色:Windows Azure

    我正在编写一个小型计算程序 对 blob 文件进行大量读取操作 我应该选择工作者角色还是网络角色 Web 角色和辅助角色之间的唯一区别是 在 Web 角色中 IIS 实际上是托管 Web 核心 启动并指向您的应用程序数据目录 您仍然可以将代
  • 如果上次修改日期已经过了某个时间,我如何告诉 Camel 仅复制文件?

    我想知道这是否可以用 Apache Camel 来实现 我想做的是让 Camel 查看文件目录 并只复制 上次修改 日期比某个日期更新的文件 例如 仅复制 2014 年 2 月 7 日之后修改的文件 基本上 我想在每次 Camel 运行时更
  • 查找 .NET 程序集中的字节偏移量

    我正在尝试调试客户向我们报告的错误 堆栈跟踪只有字节偏移量 没有行号 e g NullReferenceException 未将对象引用设置为对象的实例 Foo Bar FooFoo p 32Foo BarBar 191Foo BarBar
  • 测试立即失败,并出现未知错误:通过 systemd 运行 Selenium 网格时,DevToolsActivePort 文件不存在

    我一直在尝试改变从 shell 脚本启动 Selenium 网格服务的方式 rclocal to a systemd服务 但不起作用 脚本是这样的 bin bash java jar opt selenium server standalo
  • 关于C++默认值的一些问题

    我对函数参数列表中的默认值有一些疑问 默认值是签名的一部分吗 默认参数的参数类型怎么样 默认值存储在哪里 在堆栈或全局堆中还是在常量数据段中 否 默认argument不是签名的一部分 也不是函数类型的一部分 参数类型是签名的一部分 但默认参
  • 传递所有适用类型的函数

    我遵循了发现的建议here定义一个名为 square 的函数 然后尝试将其传递给一个名为两次的函数 函数定义如下 def square T n T implicit numeric Numeric T T numeric times n n