SDL中文论坛

标题: 公式(formula) [打印本页]

作者: ancientcc    时间: 2017-3-29 12:09
标题: 公式(formula)
令牌(token)
以一个字符串构造formula时,首先是形成令牌vector。
  1. (background_image)
复制代码

这一个字符串会拆为三个令牌


自变量赋值
自变量赋值也是一种操作,identifier_expression表示此种操作。
  1. class identifier_expression : public formula_expression {
  2.         variant execute(const formula_callable& variables, formula_debugger*) const {
  3.                 return variables.query_value(id_);
  4.         }
  5. };
复制代码
query_value基本直接调用get_value。
  1. variant map_formula_callable::get_value(const std::string& key) const
  2. {
  3.         return map_get_value_default(values_, key, fallback_ ? fallback_->query_value(key) : variant());
  4. }
复制代码
map_get_value_default的第二个参数指示了映射不存在此key时,返回是什么值。从代码可看出,去判断是否设置了回卷映射,有就取回卷映射key对应的值,否则variant()。一般情况不会设置fallback_,所以映射没有key时,返回的就是variant(),即type=TYPE_NULL的variant。

在公式调试器窗口,找不到key时的赋值操作将显示“(null)0”。为什么显示这个看以下代码。注意TYPE_INT前没有“break”。
  1. std::string variant::to_debug_string(std::vector<const game_logic::formula_callable*>* seen, bool verbose) const
  2. {
  3.         switch (type_) {
  4.         case TYPE_NULL:
  5.                 s << "(null)";
  6.         case TYPE_INT:
  7.                 s << int_value;
  8.                 break;
  9.         ......
  10. }
复制代码






欢迎光临 SDL中文论坛 (http://www.libsdl.cn/bbs/) Powered by Discuz! X3.3