LINUX.ORG.RU

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

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

А то, что не покрывает встраивание, докрывают интерфейсы.

А как же позднее связывание this (self)?

class parent = object (self)
	method foo = "parent foo"
	method bar = print_endline ("parent bar, " ^ self#foo)
end
 
class child = object
	inherit parent
	method foo = "child foo"
end
 
let () =
	let a = new parent
	and b = new child in
	a#bar ;
	b#bar

parent bar, parent foo
parent bar, child foo

package main

import "fmt"

type Parent struct {}

func (p *Parent) Foo() string {
	return "parent foo"
}

func (p *Parent) Bar() {
	fmt.Println("parent bar, " + p.Foo())
}

type Child struct {
	Parent
}

func (c *Child) Foo() string {
	return "child foo"
}

func main() {
	a := new(Parent)
	b := new(Child)
	a.Bar()
	b.Bar()
}

parent bar, parent foo
parent bar, parent foo

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

А то, что не покрывает встраивание, докрывают интерфейсы.

А как же позднее связывание this (self)?

class parent = object (self)
	method foo = "parent foo"
	method bar = print_endline ("parent bar, " ^ self#foo)
end
 
class child = object
	inherit parent
	method foo = "child foo"
end
 
let () =
	let a = new parent
	and b = new child in
	a#bar ;
	b#bar

parent bar, parent foo
parent bar, child foo
package main

import "fmt"

type Parent struct {}

func (p *Parent) Foo() string {
	return "parent foo"
}

func (p *Parent) Bar() {
	fmt.Println("parent bar, " + p.Foo())
}

type Child struct {
	Parent
}

func (c *Child) Foo() string {
	return "child foo"
}

func main() {
	a := new(Parent)
	b := new(Child)
	a.Bar()
	b.Bar()
}

parent bar, parent foo
parent bar, parent foo