@H_301_3@
比较两个数字时,我们可以使用if-else或模式匹配:
如果别的
if (guess < secretNum) println("Too small!\n") else if (guess > secretNum) println("Too big!\n") else { println("You win!\n") continueLooping = false }
模式匹配
guess match { case x if x < secretNum => println("Too small!\n") case x if x > secretNum => println("Too big!\n") case _ => { println("You win!\n") continueLooping = false } }
有没有更明确的方式来写这个?鼓励哪些?
编辑
这是Rust方式:
match guess.cmp(&secret_number) { Ordering::Less => println!("Too small!"),Ordering::Greater => println!("Too big!"),Ordering::Equal => { println!("You win!"); break; }
解决方法
如果您可以访问Scalaz库,则可以匹配Rust的样式和清晰度:
import scalaz._ import Scalaz._ guess ?|? secretNum match { case Ordering.LT => println("Too small!") case Ordering.GT => println("Too big!") case Ordering.EQ => println("You win!") }
在偏好方面,这取决于.如果性能至关重要,则if-else胜过模式匹配习语.如果可读性至关重要,那么在我看来,与Scalaz提供的设施进行模式匹配会产生更易读的代码;它避免像你在你的例子中那样使用等距守卫.
@H_301_3@