FizzBuzz的以下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 _)
}
}
答案 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
} )
}