1

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 _)
  }
}
4

2 回答 2

3

=> 的使用是不是高阶函数

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

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

于 2012-10-05T13:23:46.363 回答
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
  } )
}
于 2013-09-14T01:11:26.607 回答