13.仿简道云公式函数实战-逻辑函数-NOT

1. NOT函数

NOT 函数可用于对其参数的逻辑求反,当逻辑为 true 时,返回结果 false;当逻辑为 false 时,返回结果 true。

2. 函数用法

NOT(logical)

3. 函数示例

1)NOT(A),表示如果 A 为 true 时,则返回 false;A 为 false 时,则返回 true。例如:

  • NOT(50<60),返回 false;

  • NOT(90<60),返回 true。

2)NOT 函数可与 IF 函数等组合使用,如成绩判定时,当成绩不低于 60 分为及格,否则为不及格,则设置公式为:IF(NOT(成绩<60),"及格","不及格")

4. 代码实战

首先我们在function包下创建logic包,在logic包下创建NotFunction类,代码如下:

package com.ql.util.express.self.combat.function.logic;

import com.ql.util.express.Operator;
import com.ql.util.express.self.combat.exception.FormulaException;

/**
 * 类描述: NOT函数
 *
 * @author admin
 * @version 1.0.0
 * @date 2023/11/23 8:31
 */
public class NotFunction extends Operator {
    public NotFunction(String name) {
        this.name = name;
    }

    public NotFunction(String aliasName, String name, String errorInfo) {
        this.name = name;
        this.aliasName = aliasName;
        this.errorInfo = errorInfo;
    }

    public Object executeInner(Object[] list) throws Exception {
        return this.executeInner(list[0]);
    }

    public Object executeInner(Object op) throws Exception {
        if (op == null) {
            throw new FormulaException("null 不能执行操作:" + this.getAliasName());
        } else if (Boolean.class.equals(op.getClass())) {
            Object result = Boolean.valueOf(!((Boolean) op).booleanValue());
            return result;
        } else {
            String msg = "没有定义类型" + op.getClass().getName() + " 的 " + this.name + "操作";
            throw new FormulaException(msg);
        }
    }
}

把NotFunction类注册到公式函数入口类中,代码如下:

package com.ql.util.express.self.combat.ext;

import com.ql.util.express.ExpressRunner;
import com.ql.util.express.IExpressResourceLoader;
import com.ql.util.express.parse.NodeTypeManager;
import com.ql.util.express.self.combat.function.logic.*;

/**
 * 类描述: 仿简道云公式函数实战入口类
 *
 * @author admin
 * @version 1.0.0
 * @date 2023/11/21 15:29
 */
public class FormulaRunner extends ExpressRunner {

    public FormulaRunner() {
        super();
    }

    public FormulaRunner(boolean isPrecise, boolean isTrace) {
        super(isPrecise,isTrace);
    }

    public FormulaRunner(boolean isPrecise, boolean isStrace, NodeTypeManager nodeTypeManager) {
        super(isPrecise,isStrace,nodeTypeManager);
    }

    public FormulaRunner(boolean isPrecise, boolean isTrace, IExpressResourceLoader iExpressResourceLoader, NodeTypeManager nodeTypeManager) {
        super(isPrecise,isTrace,iExpressResourceLoader,nodeTypeManager);
    }

    @Override
    public void addSystemFunctions() {
        // ExpressRunner 的内部系统函数
        super.addSystemFunctions();
        // 扩展公式函数
        this.customFunction();
    }
    /***
     * 自定义公式函数
     */
    public void customFunction() {

        // AND函数
        this.addFunction("AND",new AndFunction("AND"));

        // IF函数
        this.addFunction("IF",new IfFunction("IF"));

        // IFS函数
        this.addFunction("IFS",new IfsFunction("IFS"));

        // XOR函数
        this.addFunction("XOR",new XorFunction("XOR"));

        // TRUE函数
        this.addFunction("TRUE",new TrueFunction("TRUE"));

        // FALSE函数
        this.addFunction("FALSE",new FalseFunction("FALSE"));

        // NOT函数
        this.addFunction("NOT",new NotFunction("NOT"));
    }
}

创建测试用例

package com.ql.util.express.self.combat;

import com.ql.util.express.DefaultContext;
import com.ql.util.express.self.combat.ext.FormulaRunner;
import org.junit.Test;

/**
 * 类描述: 实战测试类
 *
 * @author admin
 * @version 1.0.0
 * @date 2023/11/21 15:45
 */
public class CombatTest {

    @Test
    public void NOT() throws Exception{

        FormulaRunner formulaRunner = new FormulaRunner(true,true);
        // 创建上下文
        DefaultContext<String, Object> context = new DefaultContext<>();
        String express = "IF(NOT(成绩<60),\"及格\",\"不及格\")";
        context.put("成绩",79);
        Object object = formulaRunner.execute(express, context, null, true, true);
        System.out.println(object);

    }

}

运行结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/254245.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

惯性导航基础知识学习----01惯性器件相关

&#x1f308;武汉大学惯性导航课程合集是入门惯导的精品课程~ 作为导航路上的鼠鼠我&#xff0c;要开始学习惯性导航了~ 需要达到的要求是大致了解惯导的原理等~ 后期会陆续更新惯导相关的知识和笔记等~ &#x1f42c; 本blog为 武汉大学惯性导航课程 的记录~ 感谢团队提供的开…

提升广东省水泥行业效率的MES解决方案

广东省水泥行业作为我国重要的基础建设材料生产领域之一&#xff0c;提高其生产效率和降低能源消耗具有重要意义。而随着技术的发展&#xff0c;我国的MES系统技术发展&#xff0c;通过引入MES系统成为了实现降本增效目标的必要且有效的手段。MES是一种基于计算机技术的管理工具…

argparse --- 命令行选项、参数和子命令解析器详解

一、argparse简介 argparse模块提供了非常方便的命令行参数解析功能&#xff0c;能够大大简化命令行程序的开发。 现在的大型项目中都会运用argparse来管理项目中涉及的参数&#xff0c;在使用命令行时更好地定义模型参数。 argparse定义四个步骤&#xff1a; 导入argparse包…

条款5:了解c++默默编写并调用了哪些函数

如果你不自己声明&#xff0c;编译器会替你声明&#xff08;编译器版本的&#xff09;拷贝构造函数、拷贝赋值运算符和析构函数。此外&#xff0c;如果你没有声明任何构造函数&#xff0c;编译器会为你声明一个默认构造函数。 class Empty{};本质上和写成下面这样是一样的: c…

LLM之Agent(六)| 使用AutoGen、LangChian、RAG以及函数调用构建超级对话系统

本文我们将尝试AutoGen集成函数调用功能。函数调用最早出现在Open AI API中&#xff0c;它允许用户调用外部API来增强系统的整体功能和效率。例如&#xff0c;在对话过程中根据需要调用天气API。 函数调用和Agent有各种组合&#xff0c;在这里我们将通过函数调用调用RAG检索增强…

SpringBoot 3.2.0 版本 mysql 依赖下载错误

最近想尝试一下最新的 SpringBoot 项目&#xff0c;于是将自己的开源项目进行了一些升级。 JDK 版本从 JDK8 升级至 JDK17。SpringBoot 版本从 SpringBoot 2.7.3 升级到 SpringBoot 3.2.0 其中 JDK 的升级比较顺利&#xff0c;毕竟 JDK 的旧版本兼容性一直非常好。 但是在升级…

红酒为何会变蓝?这是什么原因?

有的朋友发现红酒酒渍当天没有清洗&#xff0c;第二天会变蓝。于是非常好奇&#xff0c;明明红色的葡萄酒&#xff0c;怎么会变蓝呢&#xff1f; 葡萄酒不但含有酒精&#xff0c;还含有丰富的天然色素花青素。就像我们平时在家煮紫薯粥&#xff0c;加一点小苏打明明紫红色的粥就…

C++计算(a+b)*(c-b)的值 2023年9月c++一级 电子学会中小学生软件编程C++等级考试一级真题答案解析

目录 C计算(ab)*(c-b)的值 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 C计算(ab)*(c-b)的值 2023年9月 C编程等级考试一级编程题 一、题目要求 1、编程实现 给定3个整数a、b、c&#xff0c;计算表达…

爬楼梯算法

计算跳到n阶的跳法总数 package com.zxj.algorithm.动态规划;import lombok.extern.slf4j.Slf4j;import java.util.Arrays;/*** 递归函数 f(n): 计算跳到n阶的跳法总数。* <p>* f(0) 0,* f(1) 1,* f(2) 2,* f(n) f(n-1) f(n-2)*/ Slf4j public class 爬楼梯 {/*** …

【MATLAB】数据拟合第12期-基于高斯核回归的拟合算法

有意向获取代码&#xff0c;请转文末观看代码获取方式~也可转原文链接获取~ 1 基本定义 基于高斯核回归的拟合算法是一种处理回归问题的机器学习方法。以下是该算法的简单介绍&#xff1a; 核心思想&#xff1a;高斯核回归的核心思想是利用高斯核函数对数据点进行非线性映射&a…

SpringBoot已经禁掉了循环依赖!

还在问循环依赖嘛&#xff1f;SpringBoot已经禁掉了循环依赖&#xff01; 首发2023-12-18 11:26yuan人生 如果现在面试时还有人问你循环依赖&#xff0c;你就这样怼他&#xff1a;循环依赖是一种代码质量低下的表现&#xff0c;springboot2.6之后的版本已经默认禁用了。 Spr…

【MySQL】数据库基础入门 安装MySQL

目录 介绍&#xff1a; 安装MySQL: 设置 root 账号密码 2.配置环境变量 2.找到 Path 系统变量, 点击 "编辑" 介绍&#xff1a; MySQL是一个开源的关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;它是一种用于管理和存储数据的软件。 安装MySQL: …

Vue3进阶:常用的指令缩写详解,以及代码使用示例

目录 v-bind缩写 v-on缩写 v-if和v-show缩写 v-for缩写 总结 更多关于Vue前端相关技术点&#xff0c;敬请关注公众号&#xff1a;CTO Plus后续的发文&#xff0c;有问题欢迎后台留言交流。 注意&#xff1a;由于排版太费时间&#xff0c;所以还是多多注重技术干货的内容吧…

国产电源芯片SCT2450QSTER,替代TPS54540-Q1,车规级36V 5A输出同步降压DCDC转换器

国产SCT2450Q是一款输出电流高达5A的高功率密度全集成同步降压DCDC转换器。其输入电压范围为3.8V到36V&#xff0c;集成了48mΩ高压侧MOSFET和23mΩ低压侧MOSFET。SCT2450Q采用峰值电流控制模式&#xff0c;可支持具有典型25uA低静态电流的脉冲跳过调制&#xff08;PSM&#xf…

Charles 安装与激活

步骤 1&#xff1a;购买 Charles 许可证 访问 Charles 官方网站&#xff1a;https://www.charlesproxy.com/ 在网站上查找并选择 “Buy” 或类似的选项。 选择适合你需求的许可证类型&#xff0c;填写相关信息并完成购买。 如果不想购买可点击此链接Charles 步骤 2&#xff…

ESP32 连接阿里云 MQTT 报错MQTT Connect err:2

解决方法 跳转到 这个头文件<PubSubClient.h>里 MQTT_MAX_PACKET_SIZE 把这个的大小从原来的256 改为1024 MQTT_KEEPALIVE 把这个大小从原来的15 改为65 修改后再次连接即可成功 如下图&#xff1a;

人工智能在电子商务中的十大最佳用例

“如果你没有躲在山洞里&#xff0c;你可能听说过人工智能&#xff08;AI&#xff09;这个神奇的东西。它就像一个超级智能的计算机大脑&#xff0c;像电子商务中的人工智能一样无处不在。你猜怎么着&#xff1f;它甚至进入了在线购物领域&#xff0c;这真是太棒了。” 人工智…

【贪心算法】【中位贪心】LeetCode:100123.执行操作使频率分数最大

涉及知识点 双指针 C算法&#xff1a;前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 贪心算法 题目 给你一个下标从 0 开始的整数数组 nums 和一个整数 k 。 你可以对数组执行 至多 k 次操作&#xff1a; 从数组中选择一个下标 i &#xff0c;将 nums[i] …

分享!!!(一)小编总结的base64、blob、图片文件二进制相互转换的方式以及源码

目录 第一章 了解 1.1 大概结构 1.2 准备阶段 1.2.1 了解canvas 1.2.2 了解imageData 1.2.3 了解imgUrl 1.2.4 了解base64 1.2.5 了解blob/文件二进制流 1.2.6 了解arraybuffer 1.2.7 文件、图片 第二章 掌握图中的相互转换 2.1 cavas 与 imageData的互相转换 2.1…

【Java】基于fabric8io库操作k8s集群实战(pod、deployment、service、volume)

目录 前言一、基于fabric8io操作pod1.1 yaml创建pod1.2 fabric8io创建pod案例 二、基于fabric8io创建Service&#xff08;含Deployment&#xff09;2.1 yaml创建Service和Deployment2.2 fabric8io创建service案例 三、基于fabric8io操作Volume3.1 yaml配置挂载存储卷3.2 基于fa…