我正在开设Coursera课程的第一个作业。
对于以下代码,我遇到了编译时错误。
object pascal {
def main(c: Int, r: Int) = {
pascal(c, r)
}
def pascal(c: Int, r: Int) = {
(c, r) match {
case ((r < 0) || (c < 0)) => throw new Exception
("r and c must be > 0")
case r == 0 => 1
case r == 1 => 1
case c == 0 => 1
case r == c => 1
case _ => pascal(r-1,c-1) + pascal(r-1,c-1)
}
}
}
vagrant@precise64:/vagrant/Workspace/Scala/hw1$ scalac pascal.scala
pascal.scala:7: error: not found: value ||
case ((r < 0) || (c < 0)) => throw ...
^
pascal.scala:8: error: value == is not a case class constructor, nor
does it have an unapply/unapplySeq method
case r == 0 => 1
请告知。
感谢。
答案 0 :(得分:4)
这是scala中的无效语法:您需要使用所谓的 guards 来检查布尔属性:
def pascal(c: Int, r: Int) = {
(c, r) match {
case (c,r) if ((r < 0) || (c < 0)) => throw new Exception
("r and c must be > 0")
...
}
顺便说一句,编写这样的代码更加惯用:
def pascal(c: Int, r: Int) = {
require((r >= 0) && (c >= 0), "r and c must be >= 0")
(c, r) match {
case (_, 1) => 1
...
}
您必须将错误消息更改为“r和c必须是&gt; = 0”