Можно ли заниматься программированием на основе прототипов в Scala? - PullRequest
2 голосов
/ 28 февраля 2011

Возможно ли программирование на основе прототипов в Scala?

Ответы [ 2 ]

4 голосов
/ 01 марта 2011

Я должен не согласиться с Easy Angel ... Scala-объектам не нужны классы (у них все еще есть тип ... но это не одно и то же). Отлично написано

val martin = new { 
  val name = "Martin"
  val surname = "Ring"
  def age = Calendar.getInstance.get(Calendar.YEAR) - 1986
}

также благодаря структурной типизации вы можете написать функции для этих объектов:

def printPerson(person: { def name: String; def age: Int }) = 
  println("%s (%d)".format(person.name, person.age))

Вы можете позвонить printPerson(martin), и он напечатает Martin (25)

Так что вам не нужны классы или черты, если вы действительно этого хотите.

Однако программирование на основе прототипов все еще не поддерживается языком, так как (imho) невозможно клонировать и расширять объекты анонимным типом. Я думаю, вы могли бы написать функции, чтобы сделать это ... но они потребовали бы массивного использования отражения, и, следовательно, нет поддержки родного языка ..

2 голосов
/ 28 февраля 2011

Хотя я согласен с EasyAngel, в зависимости от того, как вы хотите использовать механизм-прототип, вы можете достичь аналогичных целей с помощью механизмов Scala.Например, вы можете определить черту, которая может быть смешана с более общим классом.

В некоторых отношениях это более мощно, чем создание прототипа объекта, потому что вы можете смешивать и сочетать различные потенциально важные характеристики.Вы также можете настроить и расширить их из целевого подкласса.

Дальнейшее уточнение вашего вопроса позволит получить более сфокусированные ответы.

...