Scala 的 apply() 方法魔法是如何工作的?

2023-12-05

在 Scala 中,如果我定义一个名为apply在类或顶级对象中,每当我将一对括号附加到该类的实例,并为apply()在他们之间。例如:

class Foo(x: Int) {
    def apply(y: Int) = {
        x*x + y*y
    }
}

val f = new Foo(3)
f(4)   // returns 25

所以基本上,object(args)只是语法糖object.apply(args).

Scala 是如何进行这种转换的呢?

这里是否存在全局定义的隐式转换,类似于 Predef 对象中的隐式类型转换(但种类不同)?或者是某种更深层次的魔法?我问这个问题是因为 Scala 似乎强烈支持一致应用较小的一组规则,而不是带有许多例外的许多规则。最初这对我来说似乎是一个例外。


我不认为有比你最初所说的更深入的事情:它只是编译器转换的语法糖f(a) into f.apply(a)作为特殊的语法情况。

这可能看起来像是一个特定的规则,但只有其中的一小部分(例如,update)允许DSL类似的结构和库。

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

Scala 的 apply() 方法魔法是如何工作的? 的相关文章

随机推荐

  • 如何使用宏将数字格式化为文件名中至少有 5 位数字?

    我正在开发一个宏 其中涉及生成文件名并将 Excel 工作表保存为具有该名称的 pdf 我能够生成目标文件夹名称 如下所示 user name Environ UserName file dir C Users user name Docu
  • 为什么 JSON.parse 会因空字符串而失败? [复制]

    这个问题在这里已经有答案了 为什么 JSON parse 产生错误 Uncaught SyntaxError Unexpected end of input 如果直接返回不是更符合逻辑吗null 编辑 这不是链接问题的重复 虽然最小有效 j
  • Perl 正则表达式:剪切和粘贴

    我正在尝试使用 perl 编辑文件 本质上是剪切和粘贴文件中的内容 但是 看来我错误地构建了正则表达式 我很乐意帮助解决它 替换命令shouldcut 剪切之后的内容export PATH PATH直到但是not包括 THIS IS LAS
  • R - 多个嵌套循环

    我正在尝试编写一个嵌套循环代码来模拟 101 行数据框中的 10 列数据 第一行数据已被指定为起始值 每列应该不同 因为我的矩阵 r 是从随机法线生成的 但是 每列中的结果值完全相同 为循环索引提供一些上下文 tmax 100 ncol p
  • 在 Windows 8 上使用 gem 安装 SASS

    我尝试在 Windows 8 x64 上安装 SASS 但即使防火墙已关闭 仍然出现错误 我发出这个命令 C Ruby200 x64 bin gt gem install sass or C Ruby200 x64 bin gt ruby
  • Bootstrap 滑动选项卡(不是选项卡内容)

    我正在开发一个项目并使用 Bootstrap Tabs 作为我的选项卡 用户可以创建新选项卡 因此问题是 超过N选项卡 其中N取决于浏览器的宽度 导致此行为 我浏览了一下 Bootstrap HTML 选项卡代码 选项卡是li里面的元素ul
  • 如何获取客户端的计算机名称

    我在另一篇文章中看到了这个问题 但解决方案无法正常工作 我用 System Net Dns GetHostEntry HttpContext Current Request ServerVariables Item REMOTE HOST
  • 在 Tkinter 中向按钮添加图像

    我正在尝试将图像添加到按钮 但是当我尝试执行当前代码时遇到一些问题 它所显示的只是一张没有文字的图像 我也看不到按钮 有什么方法可以修复我当前的代码吗 from tkinter import import tkinter as tk roo
  • 发送意图的进程的 Pid

    我正在尝试发现向我发送意图的进程的进程 ID 或包名称 我不想将进程 ID 或包名称放在额外的内容中 正如其他一些问题所要求的那样 因为我不想允许欺骗 我使用的代码是 Override public void onCreate Bundle
  • 为什么session[:]在grape-rails中不起作用?

    我使用 Rails 和 Grape 作为 API 我只是好奇为什么没有session something 葡萄的方法 我可以创建 cookie 但也无法创建签名 cookie 它给我一个错误 Grape 是一个用于构建 API 的轻量级框架
  • 主屏幕网络应用程序的 Facebook 身份验证已损坏!+

    使用元名称 apple mobile web app capable 内容 yes 删除所有移动 safari ui 时 Facebook connect js js api 无法与主屏幕 web 应用程序一起使用 经过身份验证后 我会看到
  • 从活动之外的类启动意图

    我有两项活动 其中一项称为MyActivity 我希望他们都能够使用位于我们可以调用的类中的函数MyClass In MyClass 我尝试使用意图来启动活动AnotherActivity 由于构造函数采用上下文作为参数 因此我只是尝试在构
  • Hibernate @Version 注释

    hibernate version 和 ManyToOne Mapping 之间的关系是什么 假设我有两个表 部门 和 员工 这是部门是主表 和明细表中的员工 在 Employee 表中 部门 ID 作为外键引用 这是我的课程 Public
  • 在 PowerShell 上将节点从一个 XML 导入到另一个 XML

    我需要将名称为 ProjectOptions 的节点从default xml 复制到original xml 而不修改任何其他内容 原始 xml
  • 如何将 Google 数据存储用于未托管在 Google 应用引擎中的网络应用?

    我想在我的网络应用程序中使用谷歌的数据存储 但不想将其托管在谷歌应用程序引擎中 我想将其托管在其他机器上 那么我如何在这样的网络应用程序中使用数据存储 会更经济吗 您需要遵循从其他平台访问 Cloud Datastore API程序 本部分
  • 列表的 ViewModel 验证

    我有以下视图模型定义 public class AccessRequestViewModel public Request Request get private set public SelectList Buildings get pr
  • Rust *准确地*如何查找模块?

    Rust 用于从文件中查找模块的确切规则集是什么 我在网上找到的关于模块的每一个解释都说 这是模块的目的 这是一个例子 没有一个给出完整 全面 100 准确的解释Rust 如何查找模块 就连铁锈参考没有告诉您板条箱根和导入文件是否都需要声明
  • 使用 printf 连续打印数字并填充零

    在 C 中 使用 printf 我想打印一个数字序列 所以我从 for 循环中得到 1 2 9 10 11 我根据这些数字创建文件 但是当我使用 ls 列出它们时我得到 10 11 1 2 因此 我不知道如何打印 而不是尝试使用 bash
  • 使用 FileSavePicker 在 Windows Phone 8.1 中保存图像

    我想使用文件保存选择器保存图像 我在用this保存链接 但它仅适用于文本 我如何修改它以保存图像 正如你所提供的the link那么我假设你设法得到了存储文件 after 延续 这就是它在 WP8 1 运行时的工作方式 我还假设你有一个St
  • Scala 的 apply() 方法魔法是如何工作的?

    在 Scala 中 如果我定义一个名为apply在类或顶级对象中 每当我将一对括号附加到该类的实例 并为apply 在他们之间 例如 class Foo x Int def apply y Int x x y y val f new Foo