Scala学习笔记——简化代码和柯里化

Posted tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Scala学习笔记——简化代码和柯里化相关的知识,希望对你有一定的参考价值。

1.简化代码

package com.scala.first

import java.io.File
import javax.management.Query

/**
  * Created by common on 17-4-5.
  */
object FileMatcher {

  def main(args: Array[String]) {

    for (file <- filesHere)
      println(file)

    println()


    for (file <- filesMatching("src", _.endsWith(_)))
      println(file)

    for (file <- filesEnding("src"))
      println(file)

  }

  private def filesHere = (new File(".")).listFiles

  //matcher是传入一个函数,返回boolean值,比如_.endsWith(_)
  private def filesMatching(query: String, matcher: (String, String) => Boolean) = {
    for (file <- filesHere; if matcher(file.getName, query)) yield file
  }

  //上面的函数不够简洁,下面是更加简洁的定义
  private def filesMatch(matcher: String => Boolean) = {
    for (file <- filesHere; if matcher(file.getName)) yield file
  }

  //然后可以定义使用不同matcher()的方法
  def filesEnding(query: String) = {
    filesMatch(_.endsWith(query))
  }

  //使用exists来简化代码
  def containsOdd(nums: List[Int]): Boolean = {
    nums.exists(_ % 2 == 1)
  }

  def containsNeg(nums: List[Int]): Boolean = {
    nums.exists(_ < 0)
  }

}

 输出是

./.idea
./build.sbt
./target
./input
./project
./src

./src
./src

 

以上是关于Scala学习笔记——简化代码和柯里化的主要内容,如果未能解决你的问题,请参考以下文章

Scala柯里化及其应用实践

Scala - 柯里化和默认参数

Scala基础:作为值的函数及匿名函数柯里化闭包及控制抽象

Scala中的柯里化

Scala的柯里化和函数的部分施用

[Scala函数特性系列]——部分应用函数和柯里化