diff --git a/doc/tut2.md b/doc/tut2.md index 1b59288d5b..94434a84c8 100644 --- a/doc/tut2.md +++ b/doc/tut2.md @@ -86,6 +86,26 @@ Student(id: 123)` will truncate subclass fields. (*is-a* relation) for simple code reuse. Since objects are value types in Nim, composition is as efficient as inheritance. +Interfaces +---------- +Concepts like abstract classes, protocols, traits, and interfaces can be +simulated as objects of closures: + +```nim + +type + IntFieldInterface = object + getter: proc (): int + setter: proc (x: int) + + +proc outer: IntFieldInterface = + var captureMe = 0 + proc getter(): int = result = captureMe + proc setter(x: int) = captureMe = x + + result = IntFieldInterface(getter: getter, setter: setter) +``` Mutually recursive types ------------------------