Skip to content

Instantly share code, notes, and snippets.

@CoderPuppy
Created May 22, 2014 01:16
Show Gist options
  • Select an option

  • Save CoderPuppy/63948360e8878f00fd86 to your computer and use it in GitHub Desktop.

Select an option

Save CoderPuppy/63948360e8878f00fd86 to your computer and use it in GitHub Desktop.
Destructuring
type Identifier
id::String
end
getter(env, id::Identifier) = env[id.id]
assigner(env, id::Identifier, val) = env[id.id] = val
type Access
obj::Any
key::Any
end
getter(env, access::Access) = getter(getter(env, access.obj), access.key)
function assigner(env, access::Access, val)
assigner(getter(env, access.obj), access.key, val)
end
type Number
val::Integer
end
getter(env, num::Number) = env[num.val]
getter(env, obj) = obj
function assigner(env, array, val)
if length(array) != length(val)
error("Array's aren't the same length")
end
for i = 1:length(array)
expr = array[i]
if expr === array
if length(array) == 1
error("Recursive, you probably passed in a raw value")
else
error("Recursive")
end
end
assigner(env, expr, val[i])
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment