【问题标题】:How to execute a function at the time of its definition in Scala如何在 Scala 中定义函数时执行函数
【发布时间】:2013-10-26 12:33:57
【问题描述】:

有没有更惯用的方式来根据 Scala 中的定义执行函数?我能比下面的Function1 定义做得更好吗?

scala> (new Function1[Int, Int] { def apply(v1: Int) = v1 }) (5)
res0: Int = 5

是否存在证明此类调用合理的用例?我没有,但在被问到这件事后我很好奇,并认为找出答案可能会有所帮助。

【问题讨论】:

  • scala> ((x:Int) => x * 2)(3) res0: Int = 6 这看起来怎么样?说真的,你为什么要这样? :)
  • {(_: Int) + 1}(5)res0: Int = 6。仅仅因为你可以并不意味着你应该。

标签: scala


【解决方案1】:

Scala 确实为匿名函数提供了简洁的语法(您可以立即调用):

((x: Int, y: Int) => x + y)(4, 5)

我所知道的这种即时调用的唯一用例是来自另一种语言——JavaScript——它们大量用于范围界定。但在 Scala 中,您可以只使用大括号定义范围,例如:

{
    val a = 5
}
{
    val b = 4
    // a not accessible here
}

所以我没有看到这样的构造在 Scala 中有用的用例。

【讨论】:

  • 可以想象,您可以使用它在 REPL 中对您的函数进行单行测试,然后再将它们传递给其他东西。
  • @som-snytt 在您咆哮之前阅读了答案 - 据我所知,我确实回答了这个问题。如果您能证明我的假设是错误的,请自己写一个答案。否则...
  • 我发现这种模式在重构块中的函数时很有用。我可以保留代码并轻松了解外部范围内正在访问哪些变量以及我需要传递给新函数的变量。
猜你喜欢
  • 2021-12-18
  • 2012-04-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多