You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ExprTK表达式中如何直接使用向量字面量作为函数参数?

ExprTK中直接传递向量字面量给all_true函数的问题

问题描述

在ExprTK表达式中尝试直接用向量字面量作为all_true函数的参数,比如写all_true({1,1,0,1,1}),结果触发错误ERR238:Expected '}' instead of: ','。

已知两种可行但不够直观的写法:

  • 使用预先注册的向量变量,比如all_true(y),其中y是已经注册到符号表的double数组
  • 先在表达式内定义向量变量再调用,比如var v[5]:={1,1,0,1,1};all_true(v)

需要确认直接传递向量字面量的写法是否被ExprTK支持,或者是不是语法有误。

测试代码

#include "exprtk.hpp"
#include <stdio.h>

int main(void) {
   typedef exprtk::symbol_table<double> symbol_table_t;
   typedef exprtk::expression<double>   expression_t;
   typedef exprtk::parser<double>       parser_t;
   typedef exprtk::parser_error::type      err_t;

   double y[] = { 1, 1, 0, 1, 1 };

   exprtk::rtl::vecops::package<double> vecops_package;

   symbol_table_t symbol_table;
   symbol_table.add_vector("y",y);
   symbol_table.add_package(vecops_package); 

   expression_t expression;
   expression.register_symbol_table(symbol_table);

   parser_t parser;
   
   // all_true(y)
   if (parser.compile("all_true(y)",expression)) {
       printf("%.1f\n",expression.value());
   }
   else {
      printf("Error: %s\n", parser.error().c_str());
   }
   
   // all_true({1,1,0,1,1})
   if (parser.compile("all_true({1,1,0,1,1})",expression)) {
       printf("%.1f\n",expression.value());
   }
   else {
      printf("Error: %s\n", parser.error().c_str());
   }
   
   // var v[5]:={1,1,0,1,1};all_true(v)
   if (parser.compile("var v[5]:={1,1,0,1,1};all_true(v)",expression)) {
       printf("%.1f\n",expression.value());
   }
   else {
      printf("Error: %s\n", parser.error().c_str());
   }
   
   return 0;
}

结论

ExprTK不支持直接将向量字面量作为函数参数传递,这是当前语法的固有限制。

ExprTK的向量字面量语法仅允许在变量初始化场景使用(如var v[5]:={...}),无法直接作为函数实参传入。你遇到的ERR238错误正是因为解析器无法识别函数参数位置的向量字面量语法。

目前只能使用你提到的两种方案实现需求,若希望更简洁的写法,可考虑向ExprTK官方提交特性请求,但当前版本没有原生支持的更优写法。

内容的提问来源于stack exchange,提问作者shancock884

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 11:43:20