fix: roller2/roller3 中 init_hold_exp_str/exp_messy_code_check 改用 ExpressionEngine

This commit is contained in:
Huamonarch 2026-05-15 16:23:44 +08:00
parent 367802fc71
commit 06ebc21dd6
2 changed files with 13 additions and 27 deletions

View File

@ -125,27 +125,15 @@ int Roller2::init_X_exp() {
rule_json_.at("function").at(exp_stri).at("value").get<std::string>();
exp_str_ = get_macro_replaced_exp(tmp_exp);
var_exp_str_[exp_stri] = exp_str_;
res += init_hold_exp_str(exp_str_);
feedback_mode_ = true;
auto messy_code = exp_messy_code_check(exp_str_);
if (messy_code == -1) {
this->error_code_list_.push_back(
{ErrorType::EnCodeError, ErrorLocation::ActExp});
res += messy_code;
return -1;
}
try {
var_exp_[exp_stri] =
std::make_unique<mix_cc::matheval::Expression>(exp_str_, &mm_vars);
logger_->Debug() << "exp_stri:" << exp_str_ << "="
<< var_exp_[exp_stri]->evaluate() << endl;
} catch (const std::exception& e) {
logger_->Error() << "exp_stri:" << exp_str_ << "计算出错:" << e.what()
<< ",location:" << BOOST_CURRENT_LOCATION << endl;
int reg_ret = expr_engine_->registerExpression(exp_stri, exp_str_);
if (reg_ret != 0) {
this->error_code_list_.push_back(
{ErrorType::CalError, ErrorLocation::FBExp});
return -1;
}
logger_->Debug() << "exp_stri:" << exp_str_ << "="
<< expr_engine_->evaluate(exp_stri) << endl;
if (rule_json_.at("function").at(exp_stri).at("param").contains("name")) {
var_name_[exp_stri] = rule_json_.at("function")
.at(exp_stri)
@ -182,11 +170,11 @@ int Roller2::init_X_exp() {
void Roller2::refresh_var_result() {
try {
for (auto& expi : var_exp_) {
for (auto& expi : var_exp_str_) {
if (expi.first == "pre_exp") {
pre_exp_flag_ = expi.second->evaluate();
pre_exp_flag_ = expr_engine_->evaluateBool(expi.first);
} else {
var_Xdouble_[expi.first] = expi.second->evaluate();
var_Xdouble_[expi.first] = expr_engine_->evaluate(expi.first);
}
}
} catch (const std::exception& e) {

View File

@ -229,16 +229,14 @@ int Roller3::init_X_exp() {
rule_json_.at("function").at("pre_exp").at("value").get<std::string>();
exp_str_ = get_macro_replaced_exp(tmp_exp);
res += init_hold_exp_str(exp_str_);
// ExpressionEngine::registerExpression() now handles FunVars processing internally.
feedback_mode_ = false;
auto messy_code = exp_messy_code_check(exp_str_);
if (messy_code == -1) {
int reg_ret = expr_engine_->registerExpression("pre_exp", exp_str_);
if (reg_ret != 0) {
this->error_code_list_.push_back(
{ErrorType::EnCodeError, ErrorLocation::ActExp});
res += messy_code;
{ErrorType::CalError, ErrorLocation::ActExp});
res += reg_ret;
}
feedback_mode_ = false;
}
if (rule_json_.at("function").contains("input")) {