mirror of
https://github.com/nim-lang/Nim.git
synced 2026-01-01 02:42:05 +00:00
54 lines
675 B
Nim
54 lines
675 B
Nim
discard """
|
|
output: '''
|
|
10
|
|
20
|
|
int
|
|
20
|
|
3
|
|
'''
|
|
"""
|
|
|
|
import typetraits
|
|
|
|
type
|
|
FonConcept = concept x
|
|
x.x is int
|
|
|
|
GenericConcept[T] = concept x
|
|
x.x is T
|
|
const L = T.name.len
|
|
|
|
Implementation = object
|
|
x: int
|
|
|
|
Closure = object
|
|
f: proc()
|
|
|
|
proc f1(x: FonConcept): Closure =
|
|
result.f = proc () =
|
|
echo x.x
|
|
|
|
proc f2(x: GenericConcept): Closure =
|
|
result.f = proc () =
|
|
echo x.x
|
|
echo GenericConcept.T.name
|
|
|
|
proc f3[T](x: GenericConcept[T]): Closure =
|
|
result.f = proc () =
|
|
echo x.x
|
|
echo x.L
|
|
|
|
let x = Implementation(x: 10)
|
|
let y = Implementation(x: 20)
|
|
|
|
let a = x.f1
|
|
let b = x.f2
|
|
let c = x.f1
|
|
let d = y.f2
|
|
let e = y.f3
|
|
|
|
a.f()
|
|
d.f()
|
|
e.f()
|
|
|