当前位置: 首页 > news >正文

PostgreSQL中“参数默认值实现伪重载“详解

什么是伪重载?

"伪重载"指的是通过单一函数定义配合参数默认值条件逻辑来模拟传统编程语言中方法重载的效果。与真正的函数重载(PostgreSQL支持的多同名函数不同参数实现)不同,伪重载是在一个函数内部处理不同参数组合的情况。

为什么需要伪重载?

虽然PostgreSQL支持真正的函数重载,但在某些场景下,伪重载方式可能更有优势:

  1. 减少函数数量:避免创建大量相似函数
  2. 集中控制逻辑:所有变体在一个函数中实现
  3. 简化维护:修改只需在一个地方进行
  4. 参数组合灵活:处理复杂的可选参数组合

基本实现方式

CREATE OR REPLACE FUNCTION search_products(keyword TEXT DEFAULT NULL,category_id INTEGER DEFAULT NULL,min_price NUMERIC DEFAULT 0,max_price NUMERIC DEFAULT 999999
) RETURNS SETOF products AS $$
BEGINRETURN QUERY SELECT * FROM products WHERE (keyword IS NULL OR name LIKE '%' || keyword || '%')AND (category_id IS NULL OR category = category_id)AND price BETWEEN min_price AND max_price;
END;
$$ LANGUAGE plpgsql;

伪重载 vs 真正重载

真正重载示例

-- 版本1:关键词搜索
CREATE OR REPLACE FUNCTION search_products(keyword TEXT)
RETURNS SETOF products AS $$...$$;-- 版本2:分类搜索
CREATE OR REPLACE FUNCTION search_products(category_id INTEGER)
RETURNS SETOF products AS $$...$$;-- 版本3:价格区间搜索
CREATE OR REPLACE FUNCTION search_products(min_price NUMERIC, max_price NUMERIC)
RETURNS SETOF products AS $$...$$;

伪重载示例

-- 单一函数处理所有情况
CREATE OR REPLACE FUNCTION search_products(keyword TEXT DEFAULT NULL,category_id INTEGER DEFAULT NULL,min_price NUMERIC DEFAULT NULL,max_price NUMERIC DEFAULT NULL
) RETURNS SETOF products AS $$
BEGINRETURN QUERY SELECT * FROM products WHERE (keyword IS NULL OR name LIKE '%' || keyword || '%')AND (category_id IS NULL OR category = category_id)AND (min_price IS NULL OR price >= min_price)AND (max_price IS NULL OR price <= max_price);
END;
$$ LANGUAGE plpgsql;

伪重载的调用方式

-- 1. 仅关键词搜索
SELECT * FROM search_products(keyword => '手机');-- 2. 仅分类搜索
SELECT * FROM search_products(category_id => 5);-- 3. 仅价格区间搜索
SELECT * FROM search_products(min_price => 1000, max_price => 2000);-- 4. 组合搜索
SELECT * FROM search_products(keyword => '华为',category_id => 3,min_price => 2000,max_price => 5000
);-- 5. 无参数(获取所有产品)
SELECT * FROM search_products();

伪重载的实现技巧

1. NULL值处理

使用NULL作为默认值,并在WHERE条件中处理:

WHERE (param IS NULL OR column = param)

2. 参数验证

CREATE OR REPLACE FUNCTION get_orders(user_id INTEGER DEFAULT NULL,start_date DATE DEFAULT NULL,end_date DATE DEFAULT NULL
) RETURNS SETOF orders AS $$
BEGIN-- 验证至少提供一个参数IF user_id IS NULL AND start_date IS NULL AND end_date IS NULL THENRAISE EXCEPTION '必须提供至少一个过滤条件';END IF;-- 验证日期逻辑IF start_date IS NOT NULL AND end_date IS NOT NULL AND start_date > end_date THENRAISE EXCEPTION '开始日期不能晚于结束日期';END IF;RETURN QUERY SELECT * FROM orders WHERE (user_id IS NULL OR user_id = user_id)AND (start_date IS NULL OR order_date >= start_date)AND (end_date IS NULL OR order_date <= end_date);
END;
$$ LANGUAGE plpgsql;

3. 复杂条件构建

对于更复杂的场景,可以动态构建SQL:

CREATE OR REPLACE FUNCTION dynamic_search(table_name TEXT,columns TEXT[] DEFAULT ARRAY['*']::TEXT[],conditions TEXT DEFAULT NULL,order_by TEXT DEFAULT NULL,limit_count INT DEFAULT NULL
) RETURNS SETOF RECORD AS $$
DECLAREsql TEXT;col_list TEXT;
BEGIN-- 构建列列表IF columns = ARRAY['*']::TEXT[] THENcol_list := '*';ELSESELECT string_agg(quote_ident(col), ', ') INTO col_list FROM unnest(columns) AS col;END IF;-- 基础SQLsql := format('SELECT %s FROM %I', col_list, table_name);-- 添加条件IF conditions IS NOT NULL THENsql := sql || ' WHERE ' || conditions;END IF;-- 添加排序IF order_by IS NOT NULL THENsql := sql || ' ORDER BY ' || order_by;END IF;-- 添加LIMITIF limit_count IS NOT NULL THENsql := sql || ' LIMIT ' || limit_count;END IF;RETURN QUERY EXECUTE sql;
END;
$$ LANGUAGE plpgsql;

伪重载的优缺点

优点

  1. 单一入口点:所有调用通过一个函数处理
  2. 参数组合灵活:支持任意参数组合
  3. 减少重复代码:共享通用逻辑
  4. 易于扩展:添加新参数不影响现有调用

缺点

  1. 函数体可能复杂:需要处理多种情况
  2. 性能考虑:条件判断增加开销
  3. 文档需求高:需要清晰说明各参数组合
  4. 调试难度:错误可能发生在深层条件中

适用场景推荐

适合使用伪重载的情况

  1. 参数有多种可选组合
  2. 核心逻辑基本相同
  3. 参数之间有交互关系
  4. 需要频繁添加新参数

适合使用真正重载的情况

  1. 不同参数需要完全不同实现
  2. 参数类型可能导致歧义
  3. 性能是关键因素
  4. 各版本需要独立文档说明

实际应用示例:用户管理系统

CREATE OR REPLACE FUNCTION manage_user(action TEXT,  -- 'create', 'update', 'delete', 'get'user_id INTEGER DEFAULT NULL,user_name TEXT DEFAULT NULL,user_email TEXT DEFAULT NULL,user_status TEXT DEFAULT 'active'
) RETURNS JSON AS $$
DECLAREresult JSON;affected_rows INTEGER;
BEGINCASE actionWHEN 'create' THEN-- 验证必要参数IF user_name IS NULL OR user_email IS NULL THENRAISE EXCEPTION '创建用户需要提供用户名和邮箱';END IF;INSERT INTO users(username, email, status)VALUES (user_name, user_email, user_status)RETURNING row_to_json(users.*) INTO result;WHEN 'update' THEN-- 验证必要参数IF user_id IS NULL THENRAISE EXCEPTION '更新用户需要提供用户ID';END IF;UPDATE users SETusername = COALESCE(user_name, username),email = COALESCE(user_email, email),status = COALESCE(user_status, status)WHERE id = user_idRETURNING row_to_json(users.*) INTO result;WHEN 'delete' THEN-- 验证必要参数IF user_id IS NULL THENRAISE EXCEPTION '删除用户需要提供用户ID';END IF;DELETE FROM users WHERE id = user_idRETURNING row_to_json(users.*) INTO result;WHEN 'get' THENIF user_id IS NOT NULL THENSELECT row_to_json(users.*) INTO result FROM users WHERE id = user_id;ELSIF user_name IS NOT NULL THENSELECT row_to_json(users.*) INTO result FROM users WHERE username = user_name;ELSERAISE EXCEPTION '查询用户需要提供ID或用户名';END IF;ELSERAISE EXCEPTION '无效的操作类型: %', action;END CASE;RETURN json_build_object('success', TRUE,'action', action,'result', result);
EXCEPTION WHEN OTHERS THENRETURN json_build_object('success', FALSE,'action', action,'error', SQLERRM);
END;
$$ LANGUAGE plpgsql;

总结

PostgreSQL中的"参数默认值实现伪重载"是一种强大的设计模式,它通过:

  1. 默认参数:为参数提供NULL或合理的默认值
  2. 条件逻辑:在函数体内处理不同参数组合
  3. 动态SQL:必要时构建动态查询

这种模式特别适合处理有多种可选参数组合的查询和操作场景。虽然它不同于传统的函数重载,但在保持代码整洁和提供灵活接口方面表现出色。开发者应根据具体需求在真正重载和伪重载之间做出适当选择。

相关文章:

PostgreSQL中“参数默认值实现伪重载“详解

什么是伪重载&#xff1f; "伪重载"指的是通过单一函数定义配合参数默认值和条件逻辑来模拟传统编程语言中方法重载的效果。与真正的函数重载&#xff08;PostgreSQL支持的多同名函数不同参数实现&#xff09;不同&#xff0c;伪重载是在一个函数内部处理不同参数组…...

在IDEA中编写Spark程序并运行

Spark是基于scala的&#xff0c;当然它也可以支持java和scala还有python语言&#xff0c;我们这里会使用scala。 1.在Idea中安装插件&#xff0c;使得Idea中可以编写scala代码。 2.使用Maven创建项目&#xff0c;并在pom.xml文件中配置相关的依赖。 3.设置maven依赖项。修改po…...

知识图谱:AI大脑中的“超级地图”如何炼成?

人类看到“苹果”一词&#xff0c;会瞬间联想到“iPhone”“乔布斯”“牛顿”&#xff0c;甚至“维生素C”——这种思维跳跃的背后&#xff0c;是大脑将概念连结成网的能力。而AI要模仿这种能力&#xff0c;需要一张动态的“数字地图”来存储和链接知识&#xff0c;这就是​知识…...

Facebook隐私设置详解:如何保护你的个人信息

在这个数字化时代&#xff0c;个人信息安全变得尤为重要。Facebook 作为全球最大的社交网络平台之一&#xff0c;拥有数十亿用户。然而&#xff0c;随着用户数量的增加&#xff0c;隐私问题也日益凸显。本文将详细介绍 Facebook 的隐私设置&#xff0c;帮助你更好地保护个人信息…...

【Hive入门】Hive数据导入与导出:批量操作与HDFS数据迁移完全指南

目录 引言 1 Hive数据导入概述 1.1 Hive数据导入方式分类 1.2 Hive数据模型与存储结构 2 LOAD DATA命令详解 2.1 基本语法与参数 2.2 LOAD DATA执行流程 2.3 案例分析 3 HDFS数据迁移技术 3.1 HDFS文件操作与Hive集成 3.2 外部表技术应用 3.3 分区表动态加载 4 性…...

深入浅出JSON:现代数据交换的基石

JSON&#xff08;JavaScript Object Notation&#xff09;已经成为当今互联网上最流行的数据交换格式之一。无论是Web API、配置文件还是NoSQL数据库&#xff0c;JSON都扮演着至关重要的角色。本文将带你全面了解JSON&#xff0c;从基础概念到高级应用。 什么是JSON&#xff1…...

C++ 日志系统实战第四步:设计与代码实现详解

全是通俗易懂的讲解&#xff0c;如果你本节之前的知识都掌握清楚&#xff0c;那就速速来看我的项目笔记吧~ 本文将加入项目代码编写&#xff01; 目录 日志系统框架设计 模块划分 模块关系图 代码设计 实用类设计 日志等级设计 日志消息类 日志输出格式 日志落地(L…...

DeepSeek API接口调用示例(开发语言C#,替换其中key值为自己的key值即可)

示例&#xff1a; DeepSeek官方接口说明文档&#xff1a;对话补全 | DeepSeek API Docs 官网暂未提供C#代码实现&#xff1a;&#xff08;以下为根据CURL接口C#代码调用&#xff09; using System; using System.Collections.Generic; using System.Linq; using System.Text; …...

PyTorch常用命令(可快速上手PyTorch的核心功能,涵盖从数据预处理到模型训练的全流程)

以下是PyTorch常用命令的分类整理&#xff0c;涵盖张量操作、模型构建、数据加载、训练流程等核心内容&#xff1a; 1. 张量操作 创建张量 x torch.tensor([1, 2, 3]) # 从数据创建 x torch.zeros(3, 3) # 全零张量 x torch.ones(3, 3) …...

软开错题(二)

SNMP的传输层协议是UDP Linux操作系统中通常使用apache作为web服务器&#xff0c;其默认的web站点的目录是 /var/www/html 归并排序不是原地排序 邻接表&#xff1a;包含n个头节点和e个表节点&#xff0c;其广度和深度遍历的时间复杂度都是O(ne) grant使用方式 grant 权限 …...

拉削丝锥,螺纹类加工的选择之一

在我们的日常生活中&#xff0c;螺纹连接无处不在&#xff0c;从简单的螺丝钉到复杂的机械设备&#xff0c;都离不开螺纹的精密加工。今天&#xff0c;给大家介绍一种的螺纹刀具——拉削丝锥&#xff1a; 一、拉削丝锥的工作原理 拉削丝锥&#xff0c;听起来有点陌生吧&#…...

【Python Number(数字)】

Python 中的数字类型是编程的基础元素&#xff0c;用于表示数值数据并进行数学运算。以下是 Python 数字类型的核心知识点&#xff1a; 一、基础数字类型 整数&#xff08;int&#xff09; 表示整数值&#xff0c;例如 42, -7, 0支持任意精度&#xff08;无大小限制&#xff09…...

​​大疆无人机SDR 链路​​

在大疆无人机或通信技术领域&#xff0c;​​SDR​​ 是 ​​Software-Defined Radio&#xff08;软件定义无线电&#xff09;​​ 的缩写&#xff0c;而 ​​SDR 链路​​ 指的是一种​​通过软件编程实现无线通信功能的技术链路​​。其核心是通过软件动态调整通信参数&#…...

linux基础学习--linux磁盘与文件管理系统

linux磁盘与文件管理系统 1.认识linux系统 1.1 磁盘组成与分区的复习 首先了解磁盘的物理组成,主要有: 圆形的碟片(主要记录数据的部分)。机械手臂,与在机械手臂上的磁头(可擦写碟片上的内容)。主轴马达,可以转动碟片,让机械手臂的磁头在碟片上读写数据。 数据存储…...

【Qt】Qt 构建系统详解:qmake 入门到项目实战

Qt 构建系统详解&#xff1a;qmake 入门到项目实战 本文将系统介绍 Qt 构建工具 qmake 的用法&#xff0c;并通过一个完整的项目结构示例&#xff0c;帮助你掌握 .pro 文件编写、子项目管理、模块依赖等核心技能。 &#x1f9ed; 一、什么是 qmake&#xff1f; qmake 是 Qt 提…...

Laravel 12 实现验证码功能

Laravel 12 实现验证码功能 在 Laravel 12 中实现验证码功能可以通过多种方式&#xff0c;以下是几种常见的方法&#xff1a; 方法一&#xff1a;使用 Captcha 包&#xff08;推荐&#xff09; 首先安装 mews/captcha 包&#xff1a; composer require mews/captcha发布配置…...

深入解析Http11AprProtocol:Tomcat高性能通信的底层原理

HTTP/1.1 协议作为 Web 通信的基础标准&#xff0c;其实现效率直接影响服务器性能。Apache Tomcat 作为 Java 生态中最流行的 Servlet 容器&#xff0c;提供了多种 HTTP 协议实现方案&#xff0c;其中基于 Apache Portable Runtime&#xff08;APR&#xff09;的 Http11AprProt…...

HTTP请求与缓存、页面渲染全流程

文章目录 前言**1. HTTP请求与缓存处理****缓存机制**• 强缓存&#xff08;Cache-Control / Expires&#xff09;• 协商缓存&#xff08;Last-Modified / ETag&#xff09; **2. 服务器响应与数据解析****3. HTML DOM 构建****4. CSSOM 构建****5. 渲染树&#xff08;Render …...

HTB - Eureka记录

HTB - Eurekahttps://mp.weixin.qq.com/s/r1WmZXNR6YkvnwP40liciA...

CentOS 7 基础环境安装脚本

&#x1f31f; CentOS 7 基础环境安装脚本使用文档 &#x1f9f0; 一键部署&#xff01;助你在 CentOS 7 系统上快速构建高效开发环境。 开源地址&#xff1a;https://github.com/hahaha-zsq/Shortcut-Script CentOS 7 基础环境安装脚本使用 &#x1f4e6; 项目结构一览 ./ ├…...

【Python 模块】

Python 中的模块&#xff08;Module&#xff09;是组织代码的核心方式&#xff0c;通过将相关函数、类和变量封装到独立文件中&#xff0c;实现代码复用和结构化管理。以下是模块的核心知识点&#xff1a; 一、基础概念 1. 模块定义 任何 .py 文件都是一个模块模块名即文件名…...

极狐Gitlab 如何创建并使用子群组?

极狐GitLab 是 GitLab 在中国的发行版&#xff0c;关于中文参考文档和资料有&#xff1a; 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 子群组 (BASIC ALL) 您可以将极狐GitLab 群组组织成子群组。您可以使用子群组&#xff1a; 内部和外部组织分开。因为每个子…...

【MCP】服务端搭建(python和uv环境搭建、nodejs安装、pycharma安装)

【MCP】服务端搭建&#xff08;python和uv环境搭建、nodejs安装、pycharma安装&#xff09; 服务端搭建&#xff08;1&#xff09;python和uv环境搭建&#xff08;2&#xff09;nodejs安装&#xff08;3&#xff09;pycharm安装 服务端搭建 &#xff08;1&#xff09;python和…...

【疑难杂症2025-003】Java-mvn项目在gitlab-ci构建镜像时遇到的问题和解决方案

本文由Markdown语法编辑器编辑完成&#xff0e; 1.背景: 之前从同事手里接手了一个java的项目&#xff0c;是用maven构建项目的&#xff0e;由于我们的服务都是基于docker来部署的&#xff0c;因此这个java项目也是要编译成docker image然后发布&#xff0e;但是之前一直都是…...

AI与Web3.0:去中心化智能合约的未来

AI与Web3.0&#xff1a;去中心化智能合约的未来 系统化学习人工智能网站&#xff08;收藏&#xff09;&#xff1a;https://www.captainbed.cn/flu 文章目录 AI与Web3.0&#xff1a;去中心化智能合约的未来摘要引言1.1 技术演进背景1.2 行业格局分化 技术架构对比2.1 智能合约…...

记录学习的第三十五天

今天主攻单源最短路Dijkstra算法。不过&#xff0c;还是没有完全掌握。 首先是书本的例题我理解了一遍。 然后其实在力扣上做了三道题的&#xff0c;但是我看题解的情况就不太会。然后试着用上面的方法敲了一下↓的题&#xff0c;但是不对啊&#xff0c;我也不知道为什么呀。...

虚拟现实(VR)与增强现实(AR)在教育领域的应用:开启沉浸式学习新时代

前言 随着科技的飞速发展&#xff0c;虚拟现实&#xff08;VR&#xff09;和增强现实&#xff08;AR&#xff09;技术逐渐从游戏和娱乐领域走向教育领域。传统的教育模式主要依赖于书本、黑板和课堂讲解&#xff0c;这种模式虽然有效&#xff0c;但往往难以激发学生的学习兴趣和…...

线性代数之矩阵运算:驱动深度学习模型进化的数学引擎

目录 一、矩阵运算的基本概念与类型 二、矩阵运算在深度学习中的核心作用 三、典型深度学习模型中的矩阵运算实现 四、矩阵运算的优化与加速 五、未来发展趋势与挑战 矩阵运算是线性代数的核心组成部分,也是深度学习模型构建和优化的数学基础。从基本的前向传播到复杂的注…...

Spring AI(1)—— 基本使用

Spring AI 是一个用于 AI 工程的应用程序框架。 其目标是将 Spring 生态系统设计原则应用于 AI 领域。 Spring AI 提供以下功能&#xff1a; 支持所有主要的 AI 模型提供商&#xff0c;例如 Anthropic、OpenAI、Microsoft、Amazon、Google 和 Ollama等。支持跨 AI 提供商对同…...

深入浅出HTML:构建现代网页的基石

深入浅出HTML&#xff1a;构建现代网页的基石 引言 在数字世界的基石中&#xff0c;HTML&#xff08;HyperText Markup Language&#xff09;始终扮演着不可替代的角色。作为万维网的核心语言&#xff0c;HTML经历了30年的演变&#xff0c;从简单的文档标记发展到支持复杂Web…...

ai说什么是注解,并以angular ts为例

在编程中&#xff0c;注解&#xff08;Annotation&#xff09; 是一种特殊的语法结构&#xff0c;用于为代码添加元数据&#xff08;metadata&#xff09;&#xff0c;从而在不修改代码逻辑的情况下&#xff0c;提供额外的信息或指示编译器、框架、工具如何处理这些代码。注解通…...

【存储管理—动态不等长存储资源分配算法】

文章目录 一、实验目的二、实验内容与设计思想实验内容设计思路 三、实验代码实现四、总结 一、实验目的 理解动态异长存储分区资源管理&#xff0c;掌握所需数据结构和管理程序&#xff0c;了解各种存储分配算法的优点和缺点。 二、实验内容与设计思想 实验内容 1.分析uni…...

【25软考网工】第五章(8)路由协议RIP、OSPF

目录 一、路由协议--RIP 1. RIP协议 1&#xff09;RIPv1与RIPv2对比 2. 距离矢量路由协议 1&#xff09;距离矢量路由协议特点 2&#xff09;RIP路由的度量值 3&#xff09;路由优先级 4&#xff09;RIP防环机制 3. 应用案例 1&#xff09;例题:RIPv1与RIPv2区别 2&…...

日常开发中,iOS 性能调优我们怎么做?

日常开发中&#xff0c;iOS 性能调优我们怎么做&#xff1f;聊聊我用过的几款工具 最近在给一个 iOS 视频类 App 做性能优化&#xff0c;过程中踩了不少坑&#xff0c;也用了一些不错的工具&#xff0c;今天就以一个开发者视角随便聊聊我在调试过程中的一些经验。 一、性能问…...

JNDI 注入原理解析

文章目录 JNDI基础概述JNDI SPI命名服务目录服务 JNDI演示查询 DNS 服务查询 LDAP 服务条目动态协议切换 JNDI 注入漏洞 JNDI基础 概述 JNDI&#xff08;Java Naming and Directory Interface&#xff09;是Java提供的标准命名和目录接口&#xff0c;通过统一的API使应用程序…...

Android开发-视图基础

在Android应用开发中&#xff0c;视图&#xff08;View&#xff09;是构建用户界面的基本元素。无论是按钮、文本框还是复杂的自定义控件&#xff0c;它们都是基于View类或其子类实现的。掌握视图的基础知识对于创建功能强大且美观的应用至关重要。本文将深入探讨Android中的视…...

Prometheus实战教程:k8s平台-Redis监控案例

以下是 Prometheus 自动发现 Redis 实例的完整 YAML 文件示例&#xff0c;适用于生产环境。该配置包括&#xff1a; Redis 部署&#xff1a;运行 Redis 实例。Redis Exporter&#xff1a;用于暴露 Redis 指标。Prometheus 自动发现&#xff1a;通过 Kubernetes 服务发现自动抓…...

Prompt Engineering 提示词工程学习

一、Prompt Engineering 简介 Prompt Engineering 是设计和优化输入提示(Prompt)以获得预期输出的过程。在与大型语言模型(如 GPT-4)交互时,如何构造提示会显著影响模型的回答质量。 二、Prompt 的重要性 提高生成准确性:通过正确的 Prompt 引导,模型能够更好地理解用…...

数造科技携 DataBuilder 亮相安徽科交会,展现“DataOps +AI”双引擎魅力

近日&#xff0c;数造科技受邀参加第三届中国&#xff08;安徽&#xff09;科技创新成果转化交易。 作为国内领先的数据开发与治理平台提供商&#xff0c;数造科技携带其核心产品 DataBuilder 精彩亮相 “新一代信息技术展区”&#xff0c;吸引了众多参会者的目光。 关于 DataB…...

Linux/AndroidOS中进程间的通信线程间的同步 - 共享内存

在之前的文章中介绍了允许无关进程共享内存区域以便执行 IPC 的技术&#xff1a;共享文件映射。但他存在一些不足。 使用一个共享文件映射来进行 IPC 要求创建一个磁盘文件&#xff0c;即使无需对共享区域进行持久存储也需要这样做。除此之外&#xff0c;这种技术还会带来一些…...

ES6入门---第三单元 模块七: Proxy的使用+Reflect的使用

proxy: 代理 扩展(增强)对象、方法(函数)一些功能 比如: Vue Vue.config.keyCodes.enter65 Proxy作用: 比如vue中拦截 预警、上报、扩展功能、统计、增强对象等等 proxy是设计模式一种&#xff0c; 代理模式 语法: new Proxy(target, handler); …...

【JAVA】BigDecimal判断是否为0, / by zero的问题修复

bug场景 我要处理一个任务完成率的计算&#xff0c;任务完成率pct 实际值 real / 任务值 task 进入计算前&#xff0c;我需要判断task是否为空&#xff0c;或者为0&#xff0c;防止除法出错。 之前使用了equal方法 if(!task.equals(BigDecimal.ZERO))//开始计算因为刚开始测…...

从 “机器人 +“ 到 “+ 机器人“:算力政策撬动的产业生态革命

在深圳光明科学城的云端算力平台上&#xff0c;数据以每秒千万次的速度流动&#xff0c;这里每年发放的 600 万元算力补贴&#xff0c;正如同催化剂般激活着人形机器人产业的深层变革。当广东将 "算力券" 政策精准嵌入珠三角制造体系&#xff0c;一场从 "单机智…...

如何在24G显存机器上搭建一个超过gpt效果的DeepSeek-R1?

DeepSeek-R1蒸馏模型概述与应用指南 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/5af5a8b13de14bd1a95837bbf1ccaf2a.png#pic_center) 引言 DeepSeek-R1作为一款先进的AI推理模型&#xff0c;在性能上已超越GPT-4o和Claude-3.5等主流开源模型。为满足更广泛应用…...

seamless_communication,facebook推出的开源语音翻译项目

Seamless Communication‌是由Facebook Research开发的一个开源项目&#xff0c;旨在提供先进的语音和文本翻译功能&#xff0c;支持多国语音。 今天试着来复现下。 1、首先下载代码。 git clone https://github.com/facebookresearch/seamless_communication 2、按照步骤执…...

C++从入门到实战(十二)详细讲解C++如何实现内存管理

C从入门到实战&#xff08;十二&#xff09;详细讲解C如何实现内存管理 前言一、C内存管理方式1. new/delete操作内置类型2. 异常与内存管理的联系&#xff08;简单了解&#xff09;3. new和delete操作自定义类型 二、 operator new与operator delete函数&#xff08;重点&…...

console-chat-gpt开源程序是用于 AI Chat API 的 Python CLI

​一、软件介绍 文末提供程序和源码下载 console-chat-gpt开源程序是用于 AI Chat API 的 Python CLI&#xff0c;与 AI 模型聊天的终极 CLI 伴侣&#xff0c;直接从命令行享受与 OpenAI、MistralAI、Anthropic、xAI、Google AI、DeepSeek、阿里巴巴、Inception 或 Ollama 托管…...

影刀RPA开发-程序备注说明的必要性

1. 备注指令的调用 1.1 指令搜索 搜索出备注指令后&#xff0c;添加到代码框中 1.2 快捷输入 在代码框中&#xff0c;输入指令关键字&#xff0c;可以快速展示出相关指令 2.备注指令内容设置 备注信息要依据代码执行的功能书写 尽量写明该语句或该段落代码的功能作用 单行…...

第十节:图像处理基础-图像算术运算 (加法、减法、混合)

引言 在计算机视觉领域&#xff0c;图像算术运算是最基础却至关重要的核心技术。无论是实现简单的图片合成、开发智能监控系统&#xff0c;还是构建复杂的医学影像分析工具&#xff0c;加减运算和混合操作都扮演着关键角色。OpenCV作为最流行的计算机视觉库&#xff0c;提供了…...

如何使用UGUI的EventTrigger

前言 在 Unity 的 UGUI 系统中,EventTrigger 是一个强大的组件,允许开发者监听和处理多种 UI 交互事件。以下是详细的使用方法、示例代码、优缺点分析以及注意事项。 一、EventTrigger 基本用法 1. 添加 EventTrigger 组件 在 Unity 编辑器中选中 UI 对象(如 But…...