pio*_*rek 7 scala function-composition higher-order-functions
我正在学习Scala并遇到以下任务 - 如果string为空,则返回null,否则返回大写.
Apache Commons中有两个功能组合在一起解决了这个问题.在Haskell中,我只想写:
upperCaseOrNull = StringUtils.stripToNull . StringUtils.upperCase
Run Code Online (Sandbox Code Playgroud)
但是我找不到在Scala中做一个简单而干净的函数组合的方法.我发现的最短路径如下:
def upperCaseOrNull (string:String) = StringUtils.stripToNull (StringUtils.upperCase(string))
def upperCaseOrNull = StringUtils.stripToNull _ compose StringUtils.upperCase _
Run Code Online (Sandbox Code Playgroud)
Scala是否提供更简洁的语法,可能没有所有这些下划线?
Haskell 在一些它真正关心的事情上是极端紧凑的大师。所以它几乎是不可能被击败的。如果你做了太多的函数组合,以至于开销确实妨碍了你(就我个人而言,重复会更麻烦StringUtils.!),你可以做类似的事情
implicit class JoinFunctionsCompactly[B,C](g: B => C) {
def o[A](f: A => B) = g compose f
}
Run Code Online (Sandbox Code Playgroud)
所以现在你只比 Haskell 多了四个字符(_两倍)。
| 归档时间: |
|
| 查看次数: |
880 次 |
| 最近记录: |