为什么 Scala 中的柯里化需要多个参数列表?

2023-11-27

假设我有一个有 2 个参数的函数,需要部分应用,我需要将其定义为:

def f(a: Int)(b: Int) = { /* some code */ }

然后我可以将其部分应用为def fWithA = f(a) _

我的问题是:为了柯里化函数,为什么 Scala 要求使用多个参数列表声明参数?最好能够根据需要柯里化任何函数。


实际上,您可以部分应用任何您想要的方法。只需调用该方法并省略参数即可:

scala> def foo(a: Int, b: Int) = a*b
foo: (a: Int, b: Int)Int

scala> val x = foo(1,_: Int)
x: Int => Int = <function1>

scala> def bar(x: Int, y: Int, z: Int) = x*y+z
bar: (x: Int, y: Int, z: Int)Int

scala> bar(2,_:Int,6)
res0: Int => Int = <function1>

唯一的区别是,您必须告诉编译器缺少参数的类型,否则它无法在重载方法之间做出决定。

另一种方式,如果你有一个真正的函数而不是方法,那就是调用curried关于函数:

scala> val f = {(x:Int, y:Int) => x*y}
f: (Int, Int) => Int = <function2>

scala> f.curried
res2: Int => (Int => Int) = <function1>

您还可以使用以下方法从方法创建函数_:

scala> bar _
res6: (Int, Int, Int) => Int = <function3>

然后打电话curried对此:

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

为什么 Scala 中的柯里化需要多个参数列表? 的相关文章

  • Scala - lambda 参数可以匹配元组吗?

    所以说我有一些清单 比如 val l List 1 blue 5 red 2 green 然后我想过滤掉其中一个 我可以做类似的事情 val m l filter item gt val n s item unpack the tuple
  • 将额外的参数传递给多态函数?

    我有一个多态函数 可以将列表转换为集合 import shapeless PolyDefns gt import shapeless val lists List 1 2 List A B List 1 1 2 2 HNil object
  • Scala 条件列表构造

    我正在使用 Scala 2 9 2 并且想根据某些条件构建一个列表 考虑以下情况 其中 cond 是采用谓词 p 和类型 T 的值 在本例中为 t3 的某个函数 t1 t2 cond p t3 t4 我想要的行为如下 如果 p 为真 则应给
  • Scala 模式匹配打印漂亮

    是否有可能以某种方式编组部分函数 假设它总是只包含一种情况 进入某物人类可读的 假设我们有 Any 类型的集合 消息 List Any 以及使用模式匹配块定义的 PartialFuntion Any T 的数量 case object R1
  • 尝试创建 jar 时出现 UNRESOLVED DEPENDENCIES 错误

    我正在尝试构建一个 Scala jar 文件以在 Spark 中运行它 我正在关注这个tutorial http spark apache org docs latest quick start html 当尝试使用 sbt 作为构建 ja
  • Scala 警告、IntelliJ 和编译器标志

    我目前正在试用 IntelliJ Scala 插件 有件事让我有点烦恼 编译时我收到 3 个警告 Warning scala Recompiling 4 files Warning scala Warning scala there wer
  • 如何向数据框spark添加标题和列?

    我有一个数据框 我想在其中添加标题和第一列 手动 这是数据框 import org apache spark sql SparkSession val spark SparkSession builder master local appN
  • akka-http:找不到参数解组的隐式值

    我的 Spray json 支持看起来像这样 object MarshallingSupport extends SprayJsonSupport implicit def json4sFormats Formats DefaultForm
  • 如何使用 FS2 中的分类器函数对对象进行分组?

    我有一个无序的流measurements 我想将其分组为固定大小的批次 以便以后可以有效地保留它们 val measurements for id lt Seq foo bar baz value lt 1 to 5 yield id va
  • Build.scala中%和%%符号含义

    我是新来玩的 Framework 2 1 java版本 并且没有scala经验 我不明白什么是以及什么是 and 在 Build scala 中表示 我用谷歌搜索了它们但找不到它们的含义 在我的 Build scala 文件中 我有 org
  • SBT 对 Scala 类型感到困惑

    SBT 抛出以下错误 value split is not a member of String String error filter arg gt arg split delimiter length gt 2 对于以下代码块 impl
  • 将当前类作为 scala 中的参数传递

    如何传递当前类作为参数 在java中我们这样做 mymethod this class or mymethod MyClass class 如何将 scala 当前类传递给此方法 this getClass or classOf MyCla
  • Scala 匿名函数中的 return 语句

    为什么显式 return 语句 使用return关键字 在匿名函数中从封闭的命名函数返回 而不仅仅是从匿名函数本身返回 例如 以下程序会导致类型错误 def foo String x Integer gt return x foo 我知道建
  • 承诺的反面是什么?

    承诺代表将来可能可用 或无法实现 的值 我正在寻找的是一种数据类型 它表示将来可能变得不可用的可用值 可能是由于错误 Promise a b TransitionFromTo
  • 如何使用精炼库定义 A 和 B 取决于彼此的类型类?

    Problem 我有一个案例类 Passenger 从 A 点出发 前往 B 点 有效乘客意味着A点不等于B点 Passenger a Int b Int 问题 我如何使用设计乘客舱refind https index scala lang
  • 使用 org.apache.hadoop/* 依赖项离线编译 sbt 时遇到的问题

    使用依赖于 org apache hadoop 包的 sbt 进行离线编译时遇到很多麻烦 一个简单的build sbt name Test version 1 0 scalaVersion 2 10 4 libraryDependencie
  • Scala 2.8 中 <:<、<%< 和 =:= 的含义是什么?它们的文档在哪里?

    我可以在 API 文档中看到Predef https scala lang org files archive api 2 8 2 scala Predef 24 html它们是通用函数类型 From gt To 的子类 但仅此而已 嗯什么
  • SBT插件——编译前执行自定义任务

    我刚刚编写了我的第一个 SBT 自动插件 它有一个生成设置文件的自定义任务 如果该文件尚不存在 当显式调用任务时 一切都会按预期工作 但我希望在使用插件编译项目之前自动调用它 无需项目修改其 build sbt 文件 有没有办法实现这一点
  • Map 和 Set 的实际类(不是抽象类,也不是特征类)是什么?

    在 Scala 中 映射和集合文字可以通过以下方式创建 val m Map 1 gt a 以及引用的类型m字面意思都是Map Int String 然而 scala文档表明Map实际上是一个特征 具有需要实现才能实例化的抽象成员 scala
  • 如何在scala中生成n-gram?

    我正在尝试在 scala 中编写基于 n gram 的分离新闻算法 如何为大文件生成 n gram 例如 对于包含 蜜蜂是蜜蜂中的蜜蜂 的文件 首先它必须选择一个随机的 n 元语法 例如 蜜蜂 然后它必须寻找以 n 1 个单词开头的 n 元

随机推荐

  • 从 fstream 读取单个字符?

    我正在尝试从 stdio 迁移到 iostream 事实证明这非常困难 我已经掌握了加载文件和关闭文件的基础知识 但我真的不知道流是什么 或者它们如何工作 与此相比 在工作室中一切都相对简单和直接 我需要做的是 从文本文件中读取单个字符 根
  • 如何创建一个可以切换tab内容的表格?

    I want to make a table looks like this 内部表格不是问题 但不知道如何创建外部框架 其中包括 商品描述 运输 和 退货 选项卡 一个最小的例子将不胜感激 谢谢 你当然可以使用 jQuery 来解决这个问
  • 在 sqlalchemy 中对相同的声明性基础使用不同的架构

    我对 Pyramid 和 SQLAlchemy 都很陌生 我正在使用 SQLAlchemy 开发 Python Pyramid 项目 我在下面设置了一个简单的模型 我将如何在运行时将其与不同的模式一起使用 这将是一个 PostgreSQL
  • 溢出:自动在触摸设备中不起作用(iOS)

    我已经使用 twitter bootstrap 实现了一个网站 在网站的顶部 我使用了一个导航栏 在其中使用了一个下拉菜单 下拉菜单由 和 标签组成 我正在显示该 dropdwon 菜单中的成员列表 当成员列表增长时 下拉菜单水平增长 为此
  • 为什么ARM gcc在函数开始时将寄存器r3和lr压入堆栈? [复制]

    这个问题在这里已经有答案了 我尝试编写一个像这样的简单测试代码 main c main c void test void main test 然后我使用arm non eabi gcc进行编译并使用objdump来获取汇编代码 arm no
  • 在jBoss AS中创建模块

    我使用 jBoss AS 7 来发布我的各种项目 并且所有项目都使用 Jersey API 因此我不想将其部署在每个项目中 而是想为其创建一个模块 为此 我创建了文件夹 JBOSS HOME modules com sun Jersey m
  • ObjectListView - 通过单击具有固定内容/文本的指定列来删除行

    我有一个简单的问题 我自己无法解决 我有一个 ObjectListView 其中填充了我的一些对象 但除此之外 我想要另一列 其默认文本为 删除 单击该列后 应删除所选行 我怎么做 您可以通过使所需的行可编辑并使用 CellEditActi
  • 如何在 Keycloak 中执行电子邮件操作

    我尝试使用 Keycloak API 触发发送电子邮件 但没有成功 正如文档中首先描述的 我正在为我的管理员用户获取令牌 curl d client id admin cli d username admin d password admi
  • 对集合进行排序并根据特定标准对结果进行排名

    假设我有以下内容 var searches new ObservableCollection
  • 绘制带有圆周的 3D 球体

    我正在尝试使用 matplotlib 绘制一个像这样的球体 但我找不到一种在背面有虚线的方法 而且垂直周长看起来有点奇怪 import numpy as np import matplotlib pyplot as plt from mpl
  • Spark Dataframe 列与其他列的最后一个字符

    我正在寻找一种方法来从数据帧列中的字符串中获取最后一个字符并将其放入另一列中 我有一个 Spark 数据框 如下所示 animal cat mouse snake 我想要这样的东西 lastchar t e e 现在我可以使用如下 UDF
  • Apache JMeter支持http/2请求吗?

    JMeter 3 2 支持 HTTP2 吗 从版本 4 0 开始 Core JMeter 不支持 HTTP2 但有一个plugin实现它 This plugin可以通过安装JMeter 插件管理器 关于HTTP Client 自2018年1
  • Jquery背景动画

    是否可以将其动画化background color在 jQuery 中 因为它不起作用 something animate background red 1000 来自docs The jQuery用户界面项目扩展了 animate 方法通
  • 使用 Node JS 将记录数组插入 mysql

    我有一组类似的数据 var records Name Id 1 Name Id 2 Name Id 3 Name Id 4 Name Id 5 Name Id 6 记录数组中可能有数千个项目 问题1 我们可以创建一个存储过程来接受mysql
  • 为 Python 2/3 实现 Google 的 DiffMatchPatch API

    我想用 Python 编写一个简单的 diff 应用程序Google 的差异匹配补丁 API 我对 Python 还很陌生 所以我想要一个示例来说明如何使用 Diff Match Patch API 对两个文本段落进行语义比较 我不太确定如
  • Django 注释:想要删除用户 URL,而不是扩展模型。如何?

    我完全理解有关在 Django 中扩展评论应用程序的文档 并且真的想坚持使用自动功能but 在当前的应用程序中 我完全没有必要将 URL 与评论一起提交 Being 微创默认设置 我怎样才能防止这个字段出现在评论表单中 使用 Django
  • 无法使 GWT 应用程序作为 Chrome 打包应用程序工作,可能是由于 CSP

    不断收到 CSP 错误 拒绝执行内联脚本 因为它违反了以下内容安全策略指令 script src self 该问题可能是由于 GWT 生成的 HTML 文件包含内联 JS UPD 更改为清单版本 1 有所帮助 但这是一个临时解决方法 因为
  • Java世界里有类似WPF和MVVM的东西吗?

    Java世界里有类似WPF和MVVM的东西吗 你见过吗eFace eFace 是 Java 中的 XAML WPF 解决方案 第一个版本可用于 现在下载 http www soyatec com eface installation Jav
  • 我可以在 .ld 文件中使用预处理器指令吗

    我可以在 ld 文件中使用预处理器指令吗 我需要使用两组 ld 文件中的一组 并希望让构建引擎使用宏来决定 我可以这样做吗 是的你可以 您需要为链接器脚本手动运行预处理器 如下所示 in your linker script ld out
  • 为什么 Scala 中的柯里化需要多个参数列表?

    假设我有一个有 2 个参数的函数 需要部分应用 我需要将其定义为 def f a Int b Int some code 然后我可以将其部分应用为def fWithA f a 我的问题是 为了柯里化函数 为什么 Scala 要求使用多个参数