编译时弃用警告:零参数方法的 eta 扩展

2023-12-27

编译此代码片段时,scala 编译器会发出以下警告:

不推荐使用零参数方法值的 eta 扩展。你是否 打算写Main.this.porFiles5()吗? [警告]timerFunc(porFiles5)

当我将一个函数传递给另一个函数以进行简单的计时时,就会发生这种情况。计时器函数采用无参数函数返回单元,在这一行:timerFunc(porFiles5)。这个警告有必要吗?避免这种情况的惯用方法是什么?

package example
import java.nio.file._
import scala.collection.JavaConverters._
import java.time._
import scala.collection.immutable._

object Main extends App {

  val dir = FileSystems.getDefault.getPath("C:\\tmp\\testExtract")

  def timerFunc (func:()=>Unit ) = {
    val start = System.currentTimeMillis()
    timeNow()
    func()
    val finish = System.currentTimeMillis()
    timeNow()
    println((finish - start) / 1000.0 + " secs.")
    println("==================")
  }

  def porFiles5(): Unit = {
    val porFiles5 = Files.walk(dir).count()
    println(s"You have $porFiles5 por5 files.")
  }

  def timeNow(): Unit = {
    println(LocalTime.now)
  }

  timeNow()
  timerFunc(porFiles5)
  timeNow()

}

porFiles5 is not一个函数。它是一个method,这在 Scala 中是完全不同的。

如果你有一个方法,但需要一个函数,则可以使用 η-expansion 将方法提升为函数,如下所示:

someList.foreach(println _)

在某些情况下,如果从上下文中完全清楚您的意思,Scala 也会自动执行 η 扩展,例如:

someList.foreach(println)

然而,无参数方法存在歧义,因为 Scala 允许您在没有参数列表的情况下调用无参数方法,即使用empty可以在没有任何参数列表的情况下调用参数列表:

def foo() = ???
foo // normally, you would have to say foo()

现在,就您而言,存在歧义:您的意思是call porFiles5或者你的意思是 η-展开它?目前,Scala 任意消除这种情况的歧义并执行 η 扩展,但在未来的版本中,这将是一个错误,您将必须显式执行 η 扩展。

因此,要消除警告,只需使用显式 η-expansion 而不是隐式 η-expansion:

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

编译时弃用警告:零参数方法的 eta 扩展 的相关文章

随机推荐

  • 在特定网址上显示页面操作图标

    我正在尝试让我的页面操作图标显示在特定的网址上 我尝试过实施这些示例here http src chromium org viewvc chrome trunk src chrome common extensions docs examp
  • 为什么 UpdatePanel 内的按钮在第一次后不执行 JQuery 事件

    我有一个按钮 在UpdatePanel 它打开一个弹出表单 允许我输入一些数据 然后提交执行一些功能 使用输入的新数据更新 UpdatePanel 并关闭弹出窗口
  • JavaScript 执行使页面暂时挂起

    我有一个网络应用程序使用jQuery JavaScript重重 它在内存中保存一个大数组 用户通过在文本框中键入内容来过滤它 问题 当过滤算法运行时 应用程序变得无响应浏览器甚至可能询问用户是否让脚本继续 最理想的是 我希望过滤器功能在单独
  • 是否可以在运行时检测到您的 iOS 应用程序正在 iPad mini 上运行?

    在运行时检测不同的硬件对于分析很有用 以及其他更值得怀疑的目的 许多 iOS 应用程序创建者可能有兴趣了解有多少用户在 iPad mini 上体验他们的应用程序 而不仅仅是知道有多少用户在屏幕分辨率为 1024x768 的 iPad 上体验
  • 将 numpy 数组的列与另一个数组相加和相乘

    我有一个2D numpy array x和和1D numpy array y import numpy as np x np arange 12 reshape 4 3 y np array 1 0 2 0 3 0 4 0 我想乘 加列向量
  • DialogFragment 的自定义布局 OnCreateView 与 OnCreateDialog

    我正在尝试使用我自己的布局创建 DialogFragment 我见过几种不同的方法 有时布局在 OnCreateDialog 中设置如下 我正在使用 Mono 但我已经习惯了 Java public override Android App
  • 合并多个画布并下载为图像

    我正在尝试将两个 HTML 画布合并到一个画布中 然后将其下载为图像 我的代码如下 function downloadCanvas var bottleCanvas document getElementById bottleCanvas
  • ggplot 中的多行图表不使用构面

    假设我有一个太宽的图表 我想将其切成两半并将其显示为两个图表 一个使用 x 刻度范围的前半部分 第二个使用后半部分 有简单的方法吗 一个例子是ggplot diamonds aes x price geom bar 我不想使用上面的线生成的
  • FOSRestBundle:如何删除 {_format} 参数?

    我只需要支持单一 API 格式 即 JSON 并且我不喜欢在路由中使用 format 可以去掉吗 在您的 config yml 中 确保您已进行以下配置 fos rest format listener true routing loade
  • Flash CS4不肯放手

    我有一个Flash项目 它有很多源文件 我有一个使用率相当高的类 称之为 Jenine 我最近 也许是无情地 将 Jenine 从一个命名空间迁移到了另一个命名空间 我以为我们已经准备好了 我以为是时候了 新的 Jenine 在各方面都更好
  • JPA:两端都有列表,没有无限循环

    我正在尝试通过链接两个实体Set属性如 实体A Set
  • 寻找相当于机械化功能的请求

    我有兴趣看看 Requests 是否可以处理我主要在 Mechanize 中执行的一些任务 Mechanize 可以轻松处理填写表单和提交表单 但我很难在 Requests 中尝试做同样的事情 例如 import mechanize br
  • 有没有允许复制粘贴的 diff 工具

    是否有差异工具可以让您粘贴两段文本并获得差异 我无法使用在线工具 因为我正在处理专有数据 而且我还没有找到提供该功能的工具 Try WinMerge http winmerge org 它会做到这一点 Steps 下载并安装 winmerg
  • 将 +"" 添加到字符串会追加“0”

    由于偶然的打字错误 我遇到了一种我无法解释的行为 当我有 var text abc text the text变量突然变成abc0 有人可以对此提供任何见解吗 评估为数字0 这是因为为了应用一元加运算符 被强制为一个数字 与Number 这
  • PHP 类中的异常

    我正在为我的朋友编写一个 Web 应用程序 PHP 并决定使用我有限的 Java OOP 培训 我的问题是 在我的课程 应用程序中记录特定关键事情失败而不会真正破坏我的页面的最佳方式是什么 我的问题是我有一个对象 SummerCamper
  • 解析带有截断时区信息的 Java 日期

    考虑以下日期字符串 2012 10 01 01 02 03 004 0500 在 Java 中使用以下方式识别这一点SimpleDateFormat图案 yyyy MM dd HH mm ss SSSZ 但是 如果上面的时区信息被截断为 2
  • Azure blob 的阻止列表为空,但 blob 不为空!怎么会这样?

    这个问题简单来说就是 可以使用单个 PUT 请求创建块 blob 这将创建一个包含已提交内容的 blob 但该 blob不会有任何已提交的块 这意味着您不能假设提交的块的串联与提交的内容相同 使用块 blob 时 您必须特别注意具有空块列表
  • 如何 JSON 序列化集合? [复制]

    这个问题在这里已经有答案了 我有一个Pythonset包含对象 hash and eq 方法以确保集合中不包含重复项 我需要对这个结果进行 json 编码set 但即使传递一个空的set to the json dumps方法提出了一个Ty
  • 如何将 Vec 转换为 Vec? [复制]

    这个问题在这里已经有答案了 我已将文件读入无符号字节向量 let data fs read test bin expect Unable to read file 我怎样才能将这个向量转换 转换为Vec
  • 编译时弃用警告:零参数方法的 eta 扩展

    编译此代码片段时 scala 编译器会发出以下警告 不推荐使用零参数方法值的 eta 扩展 你是否 打算写Main this porFiles5 吗 警告 timerFunc porFiles5 当我将一个函数传递给另一个函数以进行简单的计