0
  • 已定义 Rectangle 模块,但为什么评估 R.length 和 R.area 给出错误:值 area 不是 Rectangle 的成员。
  • 定义 Rectangle 模块有什么改进吗?更好的代码?

编码:

class Rectangle(l:Double, w:Double)
{
    require (l>0, w>0)
    val length = l
    val width = w
    def this (l:Double) = this (l, l)
    def area = (length * width)
}

斯卡拉解释器:

class Rectangle(l:Double, w:Double)


[parsing <console>]
[superaccessors in 7ms]
[selectiveanf in 0ms]
[erasure in 4ms]
[Generate ICode from the AST in 5ms]
[inliner in 0ms]
defined class Rectangle


val R = new Rectangle (12, 12)

[parsing <console>]
[erasure in 6ms]
[lazyvals in 0ms]
[Generating icode for <console>]
[Generate ICode from the AST in 4ms]
[inliner in 0ms]
R: Rectangle = Rectangle@117cc9d


val l = println("Rectangle length is " + R.length)

[parsing <console>]
[loaded class file /home/optimight/.eclipse/org.eclipse.platform_3.7.0_155965261/      configuration/org.eclipse.osgi/bundles/201/1/.cp/lib/scala-library.jar(scala/collection/TraversableOnce.class) in 0ms]
[loaded class file /home/optimight/.eclipse/org.eclipse.platform_3.7.0_155965261/configuration/org.eclipse.osgi/bundles/201/1/.cp/lib/scala-library.jar(scala/collection/immutable/IndexedSeq.class) in 0ms]
[total in 44ms]

val A = R.area

[parsing <console>]
<console>:9: error: value area is not a member of Rectangle

该图像显示了 Eclipse Scala IDE 中的 Rectangle 和 scala 解释器的完整代码。

请指导。

4

1 回答 1

2

After a quick look at the screenshot in hires (here), it seems that you don't really use the class you have defined in the interpreter. Either the Rectangle class is loaded when the interpreter start and you redefine it when you typed: class Rectangle(l: double, w: double). Either the class is not loaded and you have defined it for the first time.

In the first case you only have to avoid typing the first line in the interpreter, in the second case, you have to load the class into the interpreter (I'm not familiar with the scala IDE interpreter, so I can't tell you how to do it).

于 2012-06-07T15:42:45.673 回答