我正在学习 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/