我有两个理由要问:
1.我想要一个更好的代码碎片来促进每个功能级别的版本控制
2.我从一些注意力缺陷症中挣扎,我很难处理大类文件等长段代码
为了解决这些问题,我过去常常使用C ++中的include指令和部分类定义以及C#中可手动定义的可折叠区域。 Scala 2.8中有没有这样的东西?
我尝试在NetBeans IDE中使用editor-fold标签,但遗憾的是它在Scala编辑器中不起作用: - (
更新:据我所知,Scala中没有这样的设施。所以我想问一下:与Scala作者有任何联系的人,或者他们的Bugzilla上的帐户(或者他们使用的任何东西),请,建议他们一个想法 - 他们应该考虑介绍一些这样的东西(我被C#区域和部分类着迷,例如,简单的旧包括看起来也是一个方便的工具),通过简洁,恕我直言使Scala更加美丽。
答案 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)可以逐行隔离更改。您有什么用例 - 这是常见的担心 - 线级隔离(允许在没有用户干预的情况下合并独立方法的更改)是不够的?
此外,如果您无法专注于使用多种方法的一个类,请使用更多类。方法通常要求您知道其他方法是什么,字段是什么,等等。在不同的文件中进行拆分只是在寻找麻烦。相反,以不同的方式封装您的问题,以便您可以一次使用较小的自包含块。