1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- discard """
- output: '''some(str), some(5), none
- some(5!)
- some(10)
- 34'''
- """
- import strutils
- type Option[A] = object
- case isDefined*: bool
- of true:
- value*: A
- of false:
- nil
- proc some[A](value: A): Option[A] =
- Option[A](isDefined: true, value: value)
- proc none[A](): Option[A] =
- Option[A](isDefined: false)
- proc `$`[A](o: Option[A]): string =
- if o.isDefined:
- "some($1)" % [$o.value]
- else:
- "none"
- let x = some("str")
- let y = some(5)
- let z = none[int]()
- echo x, ", ", y, ", ", z
- proc intOrString[A : int | string](o: Option[A]): Option[A] =
- when A is int:
- some(o.value + 5)
- elif A is string:
- some(o.value & "!")
- else:
- o
- #let a1 = intOrString(none[String]())
- let a2 = intOrString(some("5"))
- let a3 = intOrString(some(5))
- #echo a1
- echo a2
- echo a3
- # bug #10033
- type
- Token = enum
- Int,
- Float
- Base = ref object of RootObj
- case token: Token
- of Int:
- bInt: int
- of Float:
- bFloat: float
- Child = ref object of Base
- let c = new Child
- c.token = Int
- c.bInt = 34
- echo c.bInt
|