我是学习scala的新手,并且正在深入研究 Scala中的函数编程这本书。我正在研究如何测试我的练习解决方案的一些概念和编程问题,这些问题与如何正确调用伴随对象中定义的方法有关。
我有以下数据类型control.CreateGraphics
以及本书
Paint
我想在随播对象中测试方法e.Graphics
,MyList
和sealed trait MyList[+A]
case object Nil extends MyList[Nothing]
case class Cons[+A](head: A, tail: MyList[A]) extends MyList[A]
object MyList {
def apply[A](as: A*): MyList[A] = {
if (as.isEmpty) Nil
else Cons(as.head, apply(as.tail: _*))
}
def sum(ints: MyList[Int]): Int = ints match {
case Nil => 0
case Cons(x, xs) => x + sum(xs)
}
def product(ds: MyList[Double]): Double = ds match {
case Nil => 1
case Cons(x, xs) => x * product(xs)
}
}
的实现。为此,我在对象定义
apply
如果我运行这些(我是一个命令行类型的人,所以这是一个bash shell会话)它似乎按照我的预期工作
sum
但是我遇到了其他两个功能的问题。我尝试了以下组合
product
他们都给我错误。例如,我认为最有可能工作的val x = MyList(1, 2, 3, 4)
println(x)
给出了
$ scala ch3-list.scala
Cons(1,Cons(2,Cons(3,Cons(4,Nil))))
我是scala的新手,也没有java经验,因此范围规则对我来说仍然模糊。我想在概念上知道我在这里缺少什么,并获得一些关于设置测试此类方法的最佳工作流程的建议。
答案 0 :(得分:2)
您正在寻找address_book_id
。
MyList.sum(x)
方法位于随播对象中,未定义为sum
类的成员。