История изменений
Исправление 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 на основании наличия имён с сигнатурами (плюс подтипирование, все дела).