提交 674b1d34 编写于 作者: Y Yu Yang

Update code

上级 002a6c94
......@@ -5,21 +5,49 @@
Scope is a context to manage Variables. It mainly contains a map from Variable name to Variable. Net will get and update variable throw scope.
```cpp
class Scope {
Variable GetVar();
class Variable;
using VariablePtr = std::shared_ptr<Variable>;
class Scope final {
public:
Scope();
Scope(const std::shared_ptr<Scope>& parent);
//! Get Variable in this scope.
//! @return nullptr if no such variable.
const VariablePtr& getVar(const std::string& name) const;
//! Create or get a variable in this scope.
VariablePtr& createOrGetVar(const std::string& name);
private:
// var_name -> var
std::map<string, Variable> var_map_;
Scope* parent_scope_;
}
/// variable name -> variable
std::unordered_map<std::string, VariablePtr> vars_;
std::shared_ptr<Scope> parent_{nullptr};
};
```
You need to specify a scope to run a Net. One net can run in different scopes and update different variable in the scope. If you did not specify one, It will run in a default scope.
```python
with ScopeGuard(scope)
Net net = Net();
Net.run()
```cpp
Scope global;
auto x = newVar("X"); // x is created in scope global, implicitly.
auto y = newVar("Y");
Net net1;
net1.addOp("add", {x, y}, {x}); // x = x + y;
net1.run();
for (size_t i=0; i<10; ++i) {
Scope local;
auto tmp = newVar("tmp"); // tmp is created in scope local.
Net net2;
net2.addOp("add", {x, y}, {tmp});
net2.run(); // tmp = x + y;
}
Net net3;
net3.addOp("add", {x, y}, {"tmp"}); // error! cannot found "tmp" in global scope.
```
### Chain structure
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册