9b4aa785创建于 1月20日历史提交
package egg

import std.collection.HashMap

class Env {
    let map = HashMap<String, Object>()
    var out: Option<Env>

    public init(out: Env) {
        this.out = out
    }

    public init() {
        this.out = Option<Env>.None
    }

    public func get(name: String): Option<Object> {
        if (map.contains(name)) {
            return Option<Object>.Some(map[name])
        }
        return out?.get(name) ?? Option<Object>.None
    }

    public func define(name: String, value: Object): Unit {
        if (map.contains(name)) {
            map[name] = value
        } else {
            map.add(name, value)
        }
    }

    public func set(name: String, value: Object): Unit {
        if (map.contains(name)) {
            map[name] = value
            return
        }
        if (out.isSome()) {
            out?.set(name, value)
            return
        }
        throw Exception("变量未定义: ${name}")
    }
}