scala - Scala 中函数组合的简洁语法?

标签 scala higher-order-functions function-composition

我正在学习 Scala 并遇到以下任务 - 如果字符串为空,则返回 null,否则将其大写。

Apache Commons 中有两个函数组合在一起解决了这个问题。在 Haskell 中,我只想写:

upperCaseOrNull = StringUtils.stripToNull . StringUtils.upperCase

但是,我找不到在 Scala 中进行简单而干净的函数组合的方法。我发现的最短方法如下:
def upperCaseOrNull (string:String) = StringUtils.stripToNull (StringUtils.upperCase(string))
def upperCaseOrNull = StringUtils.stripToNull _ compose StringUtils.upperCase _

Scala 是否提供更简洁的语法,可能没有所有这些下划线?

最佳答案

Haskell 在它真正关心的一些事情上是极端紧凑的大师。所以几乎不可能被击败。如果你正在做太多的函数组合,以至于开销真的妨碍了你(就我个人而言,重复 StringUtils. 会让我更加烦恼!),你可以做类似的事情

implicit class JoinFunctionsCompactly[B,C](g: B => C) {
  def o[A](f: A => B) = g compose f
}

所以现在你只有四个额外的字符( _ 两次)超过 Haskell。

关于scala - Scala 中函数组合的简洁语法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22410045/

相关文章:

scala - 未应用的函数转换方法不适用于重载函数中的参数

scheme - 使用高阶函数映射的字符串加密

function - 从功能应用到功能组合的Haskell类型错误

Haskell 函数组合 (.) 和函数应用 ($) 习语 : correct use

java - Spark 1.6 java.io.IOException : Filesystem closed

scala - Scala Slick 2.0.0 的构建错误

haskell - haskell中的高阶函数解谜函数

swift - 快速映射抛出函数-两次尝试

haskell - 函数组合提示

Scala IDE 支持自动补全和语法高亮