From 6f9a0ec5a4933420f768ce0487378e7aefd7a3ec Mon Sep 17 00:00:00 2001 From: zzyyyl Date: Wed, 22 Feb 2023 11:57:04 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=AF=B9=20@=20=E8=BF=90=E7=AE=97?= =?UTF-8?q?=E7=9A=84=E9=80=BB=E8=BE=91=E7=A8=8D=E4=BD=9C=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 调整前: (...)@#none=#none, #none@(...)=#none 调整后: (...)@#none=(...), #none@(...)=(...) --- src/MaaCore/Config/TaskData.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/MaaCore/Config/TaskData.cpp b/src/MaaCore/Config/TaskData.cpp index 042115a08e..642dc3e1a0 100644 --- a/src/MaaCore/Config/TaskData.cpp +++ b/src/MaaCore/Config/TaskData.cpp @@ -262,6 +262,7 @@ bool asst::TaskData::explain_tasks(tasklist_t& new_tasks, const tasklist_t& raw_ return is_symbl_subtask_type(x) || x == symbl_name_self || x == symbl_name_back || x == symbl_name_none; }; + // perform_op 的结果不保证符合参数 multi 的要求 auto perform_op = [&](std::string_view task_expr, symbl_t op, tasklistptr_t x, tasklistptr_t y) -> std::optional { auto ret = std::make_shared(); @@ -304,8 +305,15 @@ bool asst::TaskData::explain_tasks(tasklist_t& new_tasks, const tasklist_t& raw_ break; } case symbl_at: { - for (std::string_view s : *x) { - ranges::copy(append_prefix(*y, s), std::back_inserter(*ret)); + if (y->empty()) { // A@#none = A + ranges::copy(*x, std::back_inserter(*ret)); + } + else if (x->empty()) { // #none@A = A + ranges::copy(*y, std::back_inserter(*ret)); + } + else { // (A+B)@(C+D) = A@C + A@D + B@C + B@D + ranges::for_each( + *x, [&](std::string_view s) { ranges::copy(append_prefix(*y, s), std::back_inserter(*ret)); }); } break; }