Есть ли в Scala какие-либо средства для разделения кода класса на множество файлов? - PullRequest
5 голосов
/ 15 сентября 2010

У меня есть две причины спросить:
1. Я хотел бы улучшить фрагментацию кода, чтобы упростить контроль версий на уровне функций
2. Я борюсь с некоторым дефицитом внимания, и мне трудно работать с длинными кусками кода, такими как файлы больших классов

Для решения этих проблем я использовал директивы include в C ++ и частичные определения классов и определяемые вручную области складывания в C #. Есть ли в Scala 2.8 такие вещи?

Я пытался использовать тег edit-fold в IDE NetBeans, но, к сожалению, он не работает в редакторе Scala: - (

ОБНОВЛЕНИЕ: Насколько я понимаю, в Scala нет таких возможностей. Поэтому я хотел бы спросить: кто-то, кто имеет какое-либо отношение к авторам Scala или аккаунту на их Bugzilla (или тому, что они используют), , пожалуйста, , предложите им идею - им, вероятно, следует подумать о том, чтобы представить таких (я был очарован областями C # и частичными классами, например, и простые старые включения также выглядят как удобный инструмент), чтобы сделать Scala еще более красивым благодаря лаконичности, ИМХО.

Ответы [ 5 ]

14 голосов
/ 15 сентября 2010

Как насчет того, чтобы делать это с чертами?Вы определяете это так:

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 был больше, вы могли бы разбить его дальшечерты, в результате чего деление, которое вы хотите.Обратите внимание, однако, что я не думаю, что это целесообразно, так как будет очень трудно получить хороший обзор вашего кода, если вы уже не знаете его наизусть.Однако, если вы сможете сломать его хорошим способом, вы сможете извлечь из него несколько хороших многократно используемых блоков, так что в конце концов это все же стоит сделать.

Удачи вам!

4 голосов
/ 18 сентября 2010
//file A.scala
trait A { self: B =>
....
}

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

//file C.scala
class C extends A with B
4 голосов
/ 16 сентября 2010

Предлагаю прочитать официальный документ Мартина по этой ссылке . В этой главе «Дело Суди: Компилятор Scala» вы узнаете, как можно создать компонентный дизайн, используя код в нескольких отдельных файлах.

2 голосов
/ 16 сентября 2010

Свертывание Scala-кода правильно работает в IDEA.

1 голос
/ 16 сентября 2010

Инструменты управления версиями, с которыми я работаю (в основном bzr или git), без проблем выделяют изменения построчно.Какой вариант использования у вас есть - это достаточно часто, чтобы беспокоиться - где изоляции на уровне строк (которая позволяет объединять изменения в независимые методы без вмешательства пользователя) недостаточно?

Кроме того, если вы можетене сосредотачивайтесь на чем-то большем, чем один класс со многими методами, используйте больше классов.Как правило, метод требует, чтобы вы знали, каковы другие методы, каковы поля и так далее.Это разделение на отдельные файлы просто напрашивается на неприятности.Вместо этого инкапсулируйте вашу проблему другим способом, чтобы вы могли работать с меньшими по размеру автономными кусками за раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...