LINUX.ORG.RU

История изменений

Исправление quasimoto, (текущая версия) :

Вот тут ещё про различия — http://www.cas.mcmaster.ca/~kahl/CAS706/2010/Pres/OCamlObjects_Presentation.pdf.

Если посчитать этот object type <...> за trait (интерфейс), то на Scala с некоторыми дополнительными росписями этого traits и extends можно сделать что-то вроде

trait CellLike {
  def get: Int
  def set(xn: Int)
}

def test(c: CellLike) {
  c.set(5)
  println(c.get)
}

class Cell extends CellLike {
  var x: Int = 0
  def get: Int = x
  def set(xn: Int) { x = xn }
}

def t {

  object cell extends CellLike {
    var x: Int = 0
    def get: Int = x - 1
    def set(xn: Int) { x = xn + 1 }
  }

  test(new Cell) // : Cell, <: CellLike
  test(cell)     // : cell.type, <: CellLike

}

Ocaml просто его сам придумывает и делает всем _:_ к нему на основании наличия имён с сигнатурами (плюс подтипирование, все дела).

Исправление quasimoto, :

Вот тут ещё про различия — http://www.cas.mcmaster.ca/~kahl/CAS706/2010/Pres/OCamlObjects_Presentation.pdf.

Если посчитать этот object type <...> за trait (интерфейс), то на Scala с некоторыми дополнительными росписями этого traits и extends можно сделать что-то вроде

trait CellLike {
  def get: Int
  def set(xn: Int)
}

def test(c: CellLike) {
  c.set(5)
  println(c.get)
}

class Cell extends CellLike {
  var x: Int = 0
  def get: Int = x
  def set(xn: Int) { x = xn }
}

def t {

  object cell extends CellLike {
    var x: Int = 0
    def get: Int = x - 1
    def set(xn: Int) { x = xn + 1 }
  }

  test(new Cell) // : Cell, <: CellLike
  test(cell)     // : cell.type, <: CellLike

}

Ocaml просто его сам придумывает и делает всем extends на основании наличия имён с сигнатурами (плюс подтипирование, все дела).

Исходная версия quasimoto, :

Вот тут ещё про различия — http://www.cas.mcmaster.ca/~kahl/CAS706/2010/Pres/OCamlObjects_Presentation.pdf.

Если посчитать этот object type <...> за trait (интерфейс), то на Scala с некоторыми дополнительными росписями этого traits и extends можно сделать что-то вроде

trait CellLike {
  def get: Int
  def set(xn: Int)
}

def test(c: CellLike) {
  c.set(5)
  println(c.get)
}

class Cell extends CellLike {
  var x: Int = 0
  def get: Int = x
  def set(xn: Int) { x = xn }
}

def t {

  object cell extends CellLike {
    var x: Int = 0
    def get: Int = x - 1
    def set(xn: Int) { x = xn + 1 }
  }

  test(new Cell)
  test(cell)

}

Ocaml просто его сам придумывает и делает всем extends на основании наличия имён с сигнатурами (плюс подтипирование, все дела).