SDL中文论坛
标题:
公式(formula)
[打印本页]
作者:
ancientcc
时间:
2017-3-29 12:09
标题:
公式(formula)
令牌(token)
以一个字符串构造formula时,首先是形成令牌vector。
(background_image)
复制代码
这一个字符串会拆为三个令牌
左侧大括号(TOKEN_LPARENS),
标识(TOKEN_IDENTIFIER),
右侧大括号(TOKEN_RPARENS)
自变量赋值
自变量赋值也是一种操作,identifier_expression表示此种操作。
class identifier_expression : public formula_expression {
variant execute(const formula_callable& variables, formula_debugger*) const {
return variables.query_value(id_);
}
};
复制代码
query_value基本直接调用get_value。
variant map_formula_callable::get_value(const std::string& key) const
{
return map_get_value_default(values_, key, fallback_ ? fallback_->query_value(key) : variant());
}
复制代码
map_get_value_default的第二个参数指示了映射不存在此key时,返回是什么值。从代码可看出,去判断是否设置了回卷映射,有就取回卷映射key对应的值,否则variant()。一般情况不会设置fallback_,所以映射没有key时,返回的就是variant(),即type=TYPE_NULL的variant。
在公式调试器窗口,找不到key时的赋值操作将显示“(null)0”。为什么显示这个看以下代码。注意TYPE_INT前没有“break”。
std::string variant::to_debug_string(std::vector<const game_logic::formula_callable*>* seen, bool verbose) const
{
switch (type_) {
case TYPE_NULL:
s << "(null)";
case TYPE_INT:
s << int_value;
break;
......
}
复制代码
欢迎光临 SDL中文论坛 (http://www.libsdl.cn/bbs/)
Powered by Discuz! X3.3