此FizzBu​​zz scala实现的说明

时间:2012-10-05 13:19:45

标签: scala fizzbuzz

FizzBu​​zz的以下scala实现如何工作?

这是我的想法,但我不确定我是否在正确的轨道上:   使用=>这是一个高阶函数,如果是这样,它只是返回一个字符串   i是一个字符串,其中包含"FizzBuzz""Fizz""Buzz"

package fizzbuzz

object FizzBuzz {
  def main(args : Array[String]) {
    (1 until 100).map(_ match {                
      case i : Int if ((i % 3) == 0 && (i % 5) == 0) => "FizzBuzz"
      case i : Int if ((i % 3) == 0) => "Fizz"
      case i : Int if ((i % 5) == 0) => "Buzz"
      case i : Int => i.toString
    }).foreach(println _)
  }
}

2 个答案:

答案 0 :(得分:3)

  

使用=>这是一个高阶函数

不,这里的=>是匹配案例语法的一部分。它将给定案例的模式与案例的主体分开,即语法为case pattern => body,其中pattern模式与给定值匹配,body是应该执行的代码。 pattern匹配。

代码通过迭代1到100之间的数字(通过使用map)并将每个数字与match块中的模式进行匹配来工作。模式使用模式保护来检查每个数字是否可以被3,5或两者(或两者都不能)整除。结果是一系列字符串。然后,代码使用foreach迭代该序列,并使用println打印每个项目。

答案 1 :(得分:0)

(1 to 100) map { n => (n % 3 == 0, n % 5 == 0, n) } map {
case (true, true, n) => "FizzBuzz"
case (true, false, n) => "Fizz"
case (false, true, n) => "Buzz"
case (false, false, n) => n
} foreach (println)


(1 to 100) foreach { n =>
  println( (n % 3 == 0, n % 5 == 0) match {
    case (true, true) => "FizzBuzz"
    case (true, false) => "Fizz"
    case (false, true) => "Buzz"
    case (false, false) => n
  } )
}