mirror of
https://github.com/nim-lang/Nim.git
synced 2025-12-28 17:04:41 +00:00
30 lines
616 B
Nim
30 lines
616 B
Nim
discard """
|
|
file: "tmultim1.nim"
|
|
output: "7"
|
|
"""
|
|
# Test multi methods
|
|
|
|
type
|
|
Expression = ref object {.inheritable.}
|
|
Literal = ref object of Expression
|
|
x: int
|
|
PlusExpr = ref object of Expression
|
|
a, b: Expression
|
|
|
|
method eval(e: Expression): int {.base.} = quit "to override!"
|
|
method eval(e: Literal): int = return e.x
|
|
method eval(e: PlusExpr): int = return eval(e.a) + eval(e.b)
|
|
|
|
proc newLit(x: int): Literal =
|
|
new(result)
|
|
result.x = x
|
|
|
|
proc newPlus(a, b: Expression): PlusExpr =
|
|
new(result)
|
|
result.a = a
|
|
result.b = b
|
|
|
|
echo eval(newPlus(newPlus(newLit(1), newLit(2)), newLit(4))) #OUT 7
|
|
|
|
|