aboutsummaryrefslogtreecommitdiff
path: root/ruby/env.rb
diff options
context:
space:
mode:
authorJoel Martin <github@martintribe.org>2014-04-10 21:12:17 -0500
committerJoel Martin <github@martintribe.org>2014-04-10 21:12:17 -0500
commitb5f469de182a3e95b2d968ddccf2e2f9b77a3dc2 (patch)
tree04052d317166c09058ebac414e9cfdc7825fa038 /ruby/env.rb
parent136e5690eec17aa90c35e3fccd8ad6100acd9356 (diff)
downloadmal-b5f469de182a3e95b2d968ddccf2e2f9b77a3dc2.tar.gz
mal-b5f469de182a3e95b2d968ddccf2e2f9b77a3dc2.zip
Ruby: add step3
Diffstat (limited to 'ruby/env.rb')
-rw-r--r--ruby/env.rb28
1 files changed, 28 insertions, 0 deletions
diff --git a/ruby/env.rb b/ruby/env.rb
new file mode 100644
index 0000000..dfd5ec9
--- /dev/null
+++ b/ruby/env.rb
@@ -0,0 +1,28 @@
+class Env
+ attr_accessor :data
+ def initialize(outer=nil, binds=[], exprs=[])
+ @data = {}
+ @outer = outer
+ end
+
+ def find(key)
+ if @data.key? key
+ return self
+ elsif @outer
+ return @outer.find(key)
+ else
+ return nil
+ end
+ end
+
+ def set(key, value)
+ @data[key] = value
+ return value
+ end
+
+ def get(key)
+ env = find(key)
+ raise "'" + key.to_s + "' not found" if not env
+ env.data[key]
+ end
+end