在Scala中有没有办法将一个类代码拆分成多个文件?

在Scala中有没有办法将一个类代码拆分成多个文件?,scala,netbeans,Scala,Netbeans,我有两个理由要问: 1.我想要一个更好的代码片段,以便于在每个功能级别上进行版本控制 2.我患有注意力缺陷障碍,很难处理长代码段,比如大类文件 为了解决这些问题,我使用C++中包含的指令和部分类定义和可手动定义的可折叠区域。Scala 2.8中有这样的东西吗 我曾尝试在NetBeans IDE中使用编辑器折叠标记,但不幸的是,它在Scala editor中不起作用:-( 更新:据我所知,Scala中没有这样的设施。所以我想问:与Scala作者有任何联系的人,或者他们的Bugzilla帐户(或者他

我有两个理由要问:
1.我想要一个更好的代码片段,以便于在每个功能级别上进行版本控制
2.我患有注意力缺陷障碍,很难处理长代码段,比如大类文件

为了解决这些问题,我使用C++中包含的指令和部分类定义和可手动定义的可折叠区域。Scala 2.8中有这样的东西吗

我曾尝试在NetBeans IDE中使用编辑器折叠标记,但不幸的是,它在Scala editor中不起作用:-(


更新:据我所知,Scala中没有这样的设施。所以我想问:与Scala作者有任何联系的人,或者他们的Bugzilla帐户(或者他们使用的任何东西)的人,请向他们建议一个想法-他们可能应该考虑引入这样的东西(例如,我对C#区域和部分类很感兴趣,而普通的旧包含看起来也像是一个方便的工具)通过简洁性使Scala变得更加美丽,IMHO。

如何利用特征来实现它?您这样定义它:

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
}
如果类<代码>点更大,你可以将其进一步划分为特征,从而得到你想要的划分。但是,请注意,我认为这是不可取的,因为这将使你很难对你的代码有一个好的概述,除非你已经记住了它。但是,如果你能以一种好的方式打破它,你可以我们无法从中获得一些好的、可重用的块,因此最终它可能仍然值得一做


祝您好运!

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

我使用的版本控制工具(主要是bzr或git)在逐行隔离更改方面没有问题。您有什么用例(这是很常见的问题)行级隔离在哪里(允许在没有用户干预的情况下合并对独立方法的更改)还不够吗


此外,如果您不能专注于一个类和多个方法这样大的类,请使用更多的类。一个方法通常要求您知道其他方法是什么,字段是什么,等等。将其拆分到不同的文件只是自找麻烦。相反,请以不同的方式封装您的问题,以便您可以使用smaller一次包含一个独立的块。

我建议此时阅读Martin的白皮书。在白皮书“Case Sudy:Scala编译器”一章中,您将了解如何在多个单独的文件中使用代码实现基于组件的设计。

这并不是真的回答您的问题,但您可能想看看这个:It的用于Netbeans的Vim插件。我不知道你是否喜欢使用Vim,但这个插件可以折叠代码。如果它有整个Vim功能集,它也可以通过缩进折叠。代码折叠对我来说适用于Netbeans 6.9.1和Scala插件。你是指特殊的
/
标记吗?这些标记目前不起作用。@rex kerr,是的,我是指编辑器-折叠标签。折叠不是手动定义的(按主题),而是自然语言(如函数、循环等)对我来说似乎毫无用处。我需要按公共主题折叠分组,而不是按语法折叠分组。我指的不仅仅是语言块(如函数)折叠,但手动定义要命名和折叠的区域,如C#中的#区域。Idea中有这样的功能吗?是的,可以折叠任意区域(用省略号代替)。您还可以定义文件结构的哪些部分在最初打开文件时应预折叠。我的意思不是通过行,而是通过函数(当函数增长时,改变它们行尾的行数并向下推下一个函数开始的行)。至于对焦,我很满意C++有一个类声明的文件(列出所有的方法)。每个方法实现都有一个单独的文件。这对于类的文档化也非常方便,因为详细的描述性注释可以放在声明文件中,而不会使代码文件变得混乱。@Ivan-我没有遇到过git在某些行向下推过其他行时感到困惑的问题。它似乎与代码相匹配比这更好。在NetBeans中使用大括号折叠,看起来你又回到了一个文件中,列出了所有的方法,只是你可以将它们展开。因此,如果你至少能在大括号折叠时工作,你应该状态良好。@rex kerr,我想在NetBeans Scala编辑器中,大括号折叠“在星期天”起作用还有一些日子,当它偶尔有心情工作时:-)这可能是由错误引起的(红色波浪下划线)Net Beans Scala editor用于查找甚至是绝对正确、可编译和工作的代码,有时甚至是自己生成的代码。Eclipse Scala editor在我的系统上根本不起作用,而是引发了许多屏幕长异常。我的所有内容都是最新的,NetBeans和Eclipse的插件都是从它们的官方更新报告中安装的Touries。我希望有一天它们会被调试。按照Randall的建议,我今晚将尝试Idea。谢谢。我会读到这篇文章。我一直认为复杂而冗长的代码是糟糕架构的结果。使用Scala设计好的代码仍然是一个需要探索和思考的领域。。。
//file A.scala
trait A { self: B =>
....
}

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

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