I can create a Symbol with spaces and other special characters e.g. complex = :"code-1 23"
I can use this Symbol as a key to a Hash, but so far I could not figure out how to use it as a key in a NamedTuple. Is it possible? How?
See my experiments:
macro t(name)
print "%s %s\n" % {typeof({{name}}), {{name}}}
end
simple = :name
t simple
complex = :"code-1 23"
t complex
h = {simple => 1, complex => 2}
t h
nt = {name: "foo", complex: "bar"}
t nt
p nt["name"]
p nt[:name]
p nt[simple]
p nt["complex"]
p nt[:complex]
p nt[complex]
Symbol name
Symbol code-1 23
Hash(Symbol, Int32) {:name => 1, :"code-1 23" => 2}
NamedTuple(name: String, complex: String) {name: "foo", complex: "bar"}
"foo"
"foo"
"foo"
"bar"
"bar"
Unhandled exception: Missing named tuple key: :"code-1 23" (KeyError)
from /usr/share/crystal/src/named_tuple.cr:122:18 in '[]'
from z.cr:25:1 in '__crystal_main'
from /usr/share/crystal/src/crystal/main.cr:110:5 in 'main_user_code'
from /usr/share/crystal/src/crystal/main.cr:96:7 in 'main'
from /usr/share/crystal/src/crystal/main.cr:119:3 in 'main'
from __libc_start_main
from _start
from ???