Skip to content

Instantly share code, notes, and snippets.

@onionhammer
Last active December 26, 2015 00:19
Show Gist options
  • Save onionhammer/7062992 to your computer and use it in GitHub Desktop.
Save onionhammer/7062992 to your computer and use it in GitHub Desktop.
?? operator in nimrod
template `??`*(value, default: expr): expr =
if value == nil: default
else: value
template `??`*[T](value : ref T, default : ref T) : ref T =
if value == nil: default
else: value
template `??`*[T](value : ref T, default : T) : T =
if value == nil: default
else: value[]
var someStr: string# = "Hello"
echo someStr ?? "world!"
type
PPerson = ref TPerson
TPerson = object
name: string
proc `$`*(person: TPerson): string = person.name
proc `$`*(person: ref TPerson): string = person.name
var person : PPerson #= PPerson(name: "Jim")
var otherPerson : PPerson #= PPerson(name: "John")
echo person ?? otherPerson ?? TPerson(name: "James")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment