Scala中是否有任何方法可以将类代码拆分为多个文件?

时间:2010-09-15 19:41:20

标签: scala netbeans

我有两个理由要问:
1.我想要一个更好的代码碎片来促进每个功能级别的版本控制 2.我从一些注意力缺陷症中挣扎,我很难处理大类文件等长段代码

为了解决这些问题,我过去常常使用C ++中的include指令和部分类定义以及C#中可手动定义的可折叠区域。 Scala 2.8中有没有这样的东西?

我尝试在NetBeans IDE中使用editor-fold标签,但遗憾的是它在Scala编辑器中不起作用: - (

更新:据我所知,Scala中没有这样的设施。所以我想问一下:与Scala作者有任何联系的人,或者他们的Bugzilla上的帐户(或者他们使用的任何东西),,建议他们一个想法 - 他们应该考虑介绍一些这样的东西(我被C#区域和部分类着迷,例如,简单的旧包括看起来也是一个方便的工具),通过简洁,恕我直言使Scala更加美丽。

5 个答案:

答案 0 :(得分:14)

如何用特质做到这一点?你可以这样定义:

trait Similarity 
{
  def isSimilar(x: Any): Boolean
  def isNotSimilar(x: Any): Boolean = !isSimilar(x)
}

...然后你就像这样使用它:

class Point(xc: Int, yc: Int) extends Similarity 
{
 var x: Int = xc
 var y: Int = yc
 def isSimilar(obj: Any) =
    obj.isInstanceOf[Point] &&
    obj.asInstanceOf[Point].x == x
}

如果班级Point更大,您可以将其进一步划分为特征,从而实现您想要的划分。但请注意,我不认为这是可取的,因为除非您已经深入了解,否则很难对代码进行良好的概述。但是,如果你能以一种很好的方式打破它,你可能会从中获得一些漂亮的,可重复使用的块,所以最后它可能仍然值得去做。

祝你好运!

答案 1 :(得分:4)

我建议马丁阅读白皮书link。在本白皮书“Case Sudy:Scala编译器”一章中,您将了解如何在几个单独的文件中实现具有代码的基于组件的设计。

答案 2 :(得分:4)

//file A.scala
trait A { self: B =>
....
}

//file B.scala
trait B { self: A =>
....
}

//file C.scala
class C extends A with B

答案 3 :(得分:2)

Scala代码折叠在IDEA中正常工作。

答案 4 :(得分:1)

我使用的版本控制工具(主要是bzr或git)可以逐行隔离更改。您有什么用例 - 这是常见的担心 - 线级隔离(允许在没有用户干预的情况下合并独立方法的更改)是不够的?

此外,如果您无法专注于使用多种方法的一个类,请使用更多类。方法通常要求您知道其他方法是什么,字段是什么,等等。在不同的文件中进行拆分只是在寻找麻烦。相反,以不同的方式封装您的问题,以便您可以一次使用较小的自包含块。