25 lines
510 B
Crystal
25 lines
510 B
Crystal
class SuperDynamic
|
|
@vars = {} of String => String | Int32
|
|
|
|
def set_vars (@vars)
|
|
end
|
|
|
|
macro method_missing (call)
|
|
{% name = call.name %}
|
|
{% if name.ends_with? "=" %}
|
|
{% name = name.gsub(/=$/, "") %}
|
|
raise "unknown var" unless @vars.has_key? {{name.id.stringify}}
|
|
@vars[{{name.id.stringify}}] = {{call.args[0].id}}
|
|
{% else %}
|
|
@vars[{{name.id.stringify}}]
|
|
{% end %}
|
|
end
|
|
end
|
|
|
|
sd = SuperDynamic.new
|
|
|
|
sd.set_vars({ "a" => 1, "b" => "2" })
|
|
|
|
p! sd.a
|
|
sd.a = 99
|
|
p! sd.a
|