仓颉标准库 std.argopt 命令行参数解析指南:parseArguments 与 ArgumentSpec 实战详解
人工智能AI 技能文档开发工具【免费下载链接】DocAgent项目地址https://gitcode.com/Cangjie-SIG/DocAgent点击查看免费下载std.argopt 是仓颉Cangjie标准库中负责命令行参数解析的包它提供从命令行参数字符串中解析出参数名与参数值的能力是编写 CLI 工具时连接用户输入与程序行为的桥梁。本文以 std.argopt 包总览 为主线结合 parseArguments 函数参考、枚举参考 与 官方示例系统讲解选项/非选项的分类规则、ArgumentSpec与ArgumentMode的搭配用法、短选项组合与回调机制等核心细节并给出可直接编译运行的完整示例。读完本文你将掌握用parseArguments快速搭建命令行参数解析、正确处理必填值/可选值/无值三类选项以及解读ParsedArguments解析结果的全部能力。一、命令行参数的基本分类选项与非选项在深入 API 之前先理解 argopt 视角下的命令行参数分类。argopt 包提供的解析能力以参数是否由-为前缀作为区分依据将命令行参数分为选项和非选项两大类其中选项又细分为四种形态详见 argopt_package_overview.md类型前缀与形态示例短选项以单个-为前缀且仅含单个字符-a、-o长选项以--为前缀一般包含多个字符--target、--verbose短前缀长选项以单个-为前缀但包含多个字符-abc当其被定义为长选项时短选项组合以-为前缀将多个短选项以任意顺序组合-abc当a、b、c分别为短选项时非选项不以-为前缀input.txt、80801.1 关于--的特殊规则注意单独的--后面出现的所有参数也会被视作非选项。例如在-f -- a -b --cde中a、-b、--cde都是非选项。这是一个重要的边界行为--本身是选项扫描的终止符其后的任何内容即使带有-前缀都会被当作非选项处理通常用于把以-开头的文件名等字面值安全地传给程序。这一规则同样体现在parseArguments的实现说明中——当解析到--时将提前终止选项扫描其后的所有参数都将被视作非选项见 argopt_package_function.md。二、核心 API 一览std.argopt 对外暴露的 API 由 1 个函数、1 个类已标记废弃、2 个枚举、1 个结构体与 1 个异常类组成类型名称功能函数parseArguments根据给定的输入和规格解析出对应的参数类ArgOpt (deprecated)解析命令行参数并提供获取解析结果的功能未来版本即将废弃枚举ArgumentMode参数模式决定选项是否取值枚举ArgumentSpec参数规格描述选项的长短形态与模式结构体ParsedArguments参数解析结果异常类ArgumentParseException解析出错时抛出此异常下文将围绕这些 API 逐个展开。当前推荐使用的入口是parseArguments函数ArgOpt类为历史遗留接口将在第五节专门说明。三、参数规格ArgumentSpec 与 ArgumentModeparseArguments的第二个参数是ArrayArgumentSpec它描述允许出现哪些选项、以何种形态出现、是否带值。而每个ArgumentSpec中携带的ArgumentMode则决定该选项如何处理值。3.1 ArgumentMode选项的值模式ArgumentMode 枚举 继承ToString与EquatableArgumentMode接口共有三个取值public enum ArgumentMode : ToString EquatableArgumentMode { | NoValue | RequiredValue | OptionalValue }枚举值含义NoValue选项的值是不存在的即纯开关型选项如--verboseRequiredValue选项的值是必须的缺值将导致解析失败如--port 8080OptionalValue选项的值是可选的有值则取、无值则为空串如--color此外ArgumentMode还提供了toString()方法获取参数模式字符串与operator (that: ArgumentMode)比较两个模式是否相同前者用于调试输出后者在规格匹配时用于模式比对。3.2 ArgumentSpec选项的形态规格ArgumentSpec 枚举 定义如下它同时刻画了选项是长是短与是否携带回调public enum ArgumentSpec { | Short(Rune, ArgumentMode) | Short(Rune, ArgumentMode, (String) - Unit) | Long(String, ArgumentMode) | Long(String, ArgumentMode, (String) - Unit) | Full(String, Rune, ArgumentMode) | Full(String, Rune, ArgumentMode, (String) - Unit) | NonOptions((ArrayString) - Unit) }枚举值含义Short(Rune, ArgumentMode)短选项规格第一个参数是选项字符Rune类型Short(Rune, ArgumentMode, (String) - Unit)短选项规格并持有一个lambda回调函数Long(String, ArgumentMode)长选项规格第一个参数是长选项名称字符串Long(String, ArgumentMode, (String) - Unit)长选项规格并持有一个lambda回调函数Full(String, Rune, ArgumentMode)同时存在长选项和短选项一个规格同时声明长、短两种形态Full(String, Rune, ArgumentMode, (String) - Unit)同上并持有lambda回调函数NonOptions((ArrayString) - Unit)非选项规格解析到的非选项参数会批量交给回调处理Full是实践中最常用的形态例如Full(test2, rc, OptionalValue)表示用户既可以用--test2也可以写-c二者指向同一个选项。所有带回调的变体其回调都会在解析成功后被调用用于处理解析到的参数值详见 4.4 节。四、parseArguments从命令行字符串到结构化结果4.1 函数签名与整体流程public func parseArguments(args: ArrayString, specs: ArrayArgumentSpec): ParsedArgumentsargs被解析的参数数组类型为ArrayStringspecs参数规格数组类型为ArrayArgumentSpec返回值ParsedArguments即参数解析的结果见 4.5 节。该函数的处理流程依据 argopt_package_function.md将args中的每个参数与specs中定义的选项进行匹配匹配成功的选项其选项名称与对应值加入结果对象的options中未匹配的参数被当作非选项参数处理添加到nonOptions中当解析到--时提前终止选项扫描其后的所有参数都视作非选项。4.2 不同模式下的合法格式ArgumentSpec所携带的ArgumentMode直接决定了选项的合法书写格式长选项Long / Full 的长选项部分ArgumentMode合法格式RequiredValue--optionvalue或--option valueOptionalValue--optionvalue或--optionNoValue--option短选项Short / Full 的短选项部分ArgumentMode合法格式RequiredValue-ov或-o vOptionalValue-ov或-oNoValue-o注意长短选项在可选值上的差异长选项OptionalValue只支持--optionvalue或裸--option不带等号的值不会被吞掉见 4.4 的示例二而短选项OptionalValue则支持把值紧贴选项字符写成-ov。这一点是实战中最容易踩坑的地方。4.3 短选项组合的解析规则当用户输入-abc且规格中定义了多个短选项时argopt 按以下规则处理短选项组合依据 argopt_package_function.md当解析到组合中第一个非NoValue的选项时若该选项为OptionalValue紧随其后的内容若存在则会被作为该选项的值来解析若该选项为RequiredValue紧随其后的内容会被作为该选项的值来解析。长选项优先级更高如果一组短选项可以组合成长选项的字面值那么视为长选项而非短选项组合。例如同时定义了长选项abc和短选项a、b、c那么输入-abc会被视作长选项abc解析而不是短选项组合。4.4 完整示例不带回调的基本用法以下代码节选自官方示例 argument_parse.md规格中同时覆盖了短选项、长选项和 Full 形态import std.env.* import std.argopt.* main(args: ArrayString): Unit { let argSpecs [ Short(ra, NoValue), Long(test1, RequiredValue), Full(test2, rc, OptionalValue) ] try { var result parseArguments(args, argSpecs) println(Got a: ${result.options.contains(a)}) println(Test1: ${result.options.get(test1)}) println(Test2: ${result.options.get(test2)}) println(c: ${result.options.get(c)}) println(NonOptions: ${result.nonOptions}) } catch (e: ArgumentParseException) { println(Usage: error) return } }依次运行并观察结果可以直观验证 4.2 与 4.3 的规则$ cjc main.cj ./main -a --test1 t1val Got a: true Test1: Some(t1val) Test2: None c: None NonOptions: [] $ cjc main.cj ./main -a --test1 Usage: error # --test1 是 RequiredValue缺值导致解析失败 $ cjc main.cj ./main -a --test1 t1val --test2 Got a: true Test1: Some(t1val) Test2: Some() # OptionalValue 无值时为 Some() c: None NonOptions: [] $ cjc main.cj ./main -a --test1 t1val --test2 t2val Got a: true Test1: Some(t1val) Test2: Some() # 长选项 OptionalValue 不吞空格分隔的值 c: None NonOptions: [t2val] # t2val 因此成为非选项 $ cjc main.cj ./main -a --test1 t1val -ct2val Got a: true Test1: Some(t1val) Test2: None c: Some(t2val) # 短选项 OptionalValue 支持 -ct2val 紧贴取值 NonOptions: []从结果中可以提炼出三个关键行为RequiredValue缺值即报错--test1后没有值直接抛出ArgumentParseException被catch捕获后打印Usage: error长选项的OptionalValue不吞空格值--test2 t2val中t2val成为非选项而--test2的值为空串Some()若想传值应写--test2t2val短选项OptionalValue支持紧贴取值-ct2val中c取到值t2val。此外Short(ra, NoValue)的-a是开关型选项解析成功后options中以a为键存在值为空串因此result.options.contains(a)返回true。4.5 解析结果ParsedArguments 结构体ParsedArguments 是parseArguments的返回值用于存储参数解析的结果仅含两个只读属性public struct ParsedArguments { public prop options: ReadOnlyMapString, String // 解析得到的选项选项名 → 选项值 public prop nonOptions: ArrayString // 解析得到的非选项 }属性类型说明optionsReadOnlyMapString, String存储参数解析得到的选项键为选项名短选项以字符、长选项以字符串为键值为选项值nonOptionsArrayString存储参数解析得到的非选项参数这里有两个使用要点取选项值建议配合Option语义ReadOnlyMap的get返回OptionString因此示例中打印出的结果是Some(t1val)/Some()/None而非裸字符串判断选项是否存在可用contains取值可用get非选项的顺序被保留nonOptions以ArrayString形式原样存放未匹配参数如输入文件名可直接按序消费。4.6 异常处理解析失败与规格冲突parseArguments可能抛出两类异常见 argopt_package_function.md 的异常小节异常触发场景ArgumentParseException参数解析失败或解析到非法选项如未在specs中定义的选项、RequiredValue缺值等IllegalArgumentException定义了相同name的ArgumentSpec规格自相冲突ArgumentParseException 继承自 Exception提供两个构造函数public class ArgumentParseException : Exception { public init() public init(message: String) }init()构造一个不带异常信息的实例init(message: String)根据异常信息构造异常实例便于在捕获后输出用法错误提示如示例中的catch (e: ArgumentParseException) { println(Usage: error) }。4.7 进阶用法带回调与重复赋值带回调的规格可以在解析成功的同时立即消费参数值适合做即时校验或分发处理。以下代码节选自 argument_parse.md 的带回调部分import std.argopt.* main(args: ArrayString): Unit { let argSpecs [ Short(ra, NoValue) {_ println(Got a)}, Long(test1, RequiredValue) {v println(Got test1: ${v})}, Full(test2, rc, OptionalValue) {v println(Got test2: ${v})}, NonOptions {v println(Got NonOptions: ${v})} ] try { parseArguments(args, argSpecs) } catch (e: ArgumentParseException) { println(Usage: xxxx) } }运行结果$ cjc main.cj ./main -a --test1 t1val --test2 t2val Got a Got test1: t1val Got test2: Got NonOptions: [t2val]注意Got test2: \——再次印证长选项OptionalValue不吞空格分隔的值t2val最终通过NonOptions回调整体拿到。回调的入参类型为(String) - Unit非选项回调为(Array ) - Unit。重复赋值以最后一次为准如果传入的args对同一选项多次赋值则以最后一次的值作为该选项的值见 argopt_package_function.md。这一行为保证了后者覆盖前者的直觉语义无需额外去重。五、实战衔接与 std.env 协同获取命令行parseArguments的args参数通常来自两条途径main函数入口参数仓颉程序入口main(args: ArrayString)直接接收运行时命令行参数上述示例即采用此方式std.env 包的getCommandLine()该函数返回当前进程命令行ArrayString可在运行时动态获取。其函数原型为public func getCommandLine(): ArrayString见 env_package_funcs.md注意该 API 在 Windows 平台可获取其他场景下受限于非特权 API 可能暂不支持。一个典型的组合是在main中把args与规格数组一起交给parseArguments再对result.options与result.nonOptions做业务分发最后对解析失败捕获ArgumentParseException输出Usage提示。这种规格声明 集中解析 统一异常的写法比手工for循环逐项判断-前缀更稳健也天然覆盖了短选项组合、--终止符等边界场景。六、遗留 APIArgOpt 类deprecated6.1 设计概述ArgOpt 是 argopt 早期版本的参数解析类官方文档明确标注注意未来版本即将废弃使用 parseArguments 代替。它在std.argopt包总览中同样被标注为sup(deprecated)/sup。其基本模型是一个命令行参数由前缀符号、参数名及参数值组成-表示短参前缀、--表示长参前缀。可解析的短参名只能是字母可解析的长参名需以字母开头且参数名中不能包含。例如-a123和--targetabc.txt是两个合法参数短参名a、长参名target而-123和--targetabc.txt则是错误参数。6.2 参数名声明格式用户通过构造函数指定可解析的参数名短参名字符串格式为一位字母 :的组合如a:若写ab:则仅解析b作为短参名a因缺少:被忽略长参名字符串数组中每个字符串格式为--testA或testA即-- 长参参数名 前缀--可省略。例如参数名a:b:配合命令行参数-a123 -cofo只会解析出参数名为a、参数值为123的参数-cofo因无对应参数名而不会被解析。6.3 构造函数与成员函数public class ArgOpt { public init(shortArgFormat: String) // 仅解析短参名 public init(longArgList: ArrayString) // 仅解析长参名 public init(shortArgFormat: String, longArgList: ArrayString) // 同时解析短、长参名 public init(args: ArrayString, shortArgFormat: String, longArgList: ArrayString) // 解析参数名并立即解析对应取值 }成员原型功能getArg(arg: String) - OptionString返回参数arg指定参数的解析值arg为前缀与参数名组成的字符串可省略前缀getArgumentsMap() - HashMapString, String获取所有已解析的参数名与参数值以 HashMap 形式返回getUnparseArgs() - ArrayString返回未被解析的命令行参数各构造函数在参数名格式不符合规范、字符串不符合 UTF-8 编码或不存在对应 Unicode 字符时会抛出 IllegalArgumentException。6.4 ArgOpt 示例与局限长参数解析示例来自 long_argument_parse.mdimport std.argopt.* main() { let shortArgs: ArrayString [--test1abc, --test2123, --test3 xyz] let shortArgName: String let longArgName: ArrayString [--test1, test2, --test3] let ao: ArgOpt ArgOpt(shortArgs, shortArgName, longArgName) println(ao.getArg(--test1) ?? None) println(ao.getArg(--test2) ?? None) println(ao.getArg(--test3) ?? None) }运行结果abc 123 None短参数解析示例来自 short_argument_parse.mdimport std.argopt.* main() { let shortArgs: ArrayString [-a123, -bofo, -cccc] let shortArgName: String a:b:c let longArgName: ArrayString ArrayString() let ao: ArgOpt ArgOpt(shortArgs, shortArgName, longArgName) println(ao.getArg(-a) ?? None) println(ao.getArg(-b) ?? None) println(ao.getArg(-c) ?? None) }运行结果123 ofo None从结果可以看出ArgOpt的明显局限--test3 xyz空格分隔的值与-cccc无:声明的多字符紧贴均无法解析。这正是官方将其废弃、推荐迁移到parseArguments的原因——新 API 通过ArgumentSpecArgumentMode的组合系统性地覆盖了短选项组合、可选值、回调、--终止符等场景语义更完整、行为更可预期。七、API 速查与最佳实践总结7.1 速查表需要的能力推荐用法声明短选项Short(rx, ArgumentMode)或带回调的Short(rx, ArgumentMode) { ... }声明长选项Long(name, ArgumentMode)或带回调的Long(name, ArgumentMode) { ... }同时支持长短写法Full(name, rx, ArgumentMode)含回调变体声明非选项处理NonOptions { v ... }开关型选项ArgumentMode.NoValue仅接受--opt/-o必填值选项ArgumentMode.RequiredValue长选项--optv或--opt v短选项-ov或-o v可选值选项ArgumentMode.OptionalValue长选项--optv或--opt不吞空格值短选项-ov或-o终止选项扫描输入--其后的所有参数均为非选项读取解析结果result.options.get(name)、result.options.contains(x)、result.nonOptions捕获解析错误catch (e: ArgumentParseException)可构造带/不带 message 的实例获取命令行来源main(args: ArrayString)或 std.env 的 getCommandLine()7.2 最佳实践优先使用parseArguments新代码一律走函数式 API避免使用已废弃的ArgOpt类用Full减少规格冗余一个选项同时支持长短两种写法时用Full(name, rx, mode)一次声明避免重复定义导致IllegalArgumentException警惕OptionalValue长选项的空格值陷阱--opt value中value会落入nonOptions需要传值务必写成--optvalue把--当作逃生通道处理以-开头的文件路径等字面值参数时引导用户用--分隔统一异常出口在try内调用parseArgumentscatch (e: ArgumentParseException)中输出Usage提示并返回保证 CLI 行为的友好与一致。7.3 深入阅读包级 API 定义argopt_package_overview.md总览、argopt_package_function.md函数、argopt_package_enums.md枚举、argopt_package_struct.md结构体、argopt_package_exception.md异常、argopt_package_classes.md遗留类索引速查ArgumentSpec_enum.md、ArgumentMode_enum.md、ParsedArguments_struct.md、ArgumentParseException_class.md、ArgOpt_class.md可运行示例argument_parse.md、long_argument_parse.md、short_argument_parse.md相关基础类型core 包 String/Array/Option、collection 包 ReadOnlyMap、env 包命令行获取。综上std.argopt 以ArgumentSpecArgumentMode的声明式规格为核心通过parseArguments一次性完成选项识别、取值与异常上报是仓颉 CLI 程序处理命令行参数的推荐起点。掌握本文的分类规则与格式约束即可快速构建出健壮、可读、行为可预期的命令行入口。赞分享人工智能AI 技能文档开发工具【免费下载链接】DocAgent项目地址https://gitcode.com/Cangjie-SIG/DocAgent点击查看免费下载相关推荐仓颉语言命令行参数解析实战std.argopt 包 parseArguments 与 ArgOpt 完全指南仓颉语言命令行参数解析实战std.argopt 包 parseArguments 与 ArgOpt 完全指南 导读 本文聚焦仓颉标准库 std.argopt文档知识库教程OpenHarmony仓颉编程语言 std.argopt 命令行参数解析实战parseArguments 用法与解析规则详解仓颉编程语言 std.argopt 命令行参数解析实战parseArguments 用法与解析规则详解 命令行参数是驱动程序配置与行为的重要输入来源。仓颉标准文档知识库教程OpenHarmony仓颉 std.argopt 的 ArgOpt 类命令行参数解析 API 详解与向 parseArguments 的迁移仓颉 std.argopt 的 ArgOpt 类命令行参数解析 API 详解与向 parseArguments 的迁移 本文围绕仓颉标准库 std.argop人工智能AI 技能文档开发工具上一篇老 Mac 升级 macOS 完整指南用 OpenCore Legacy Patcher 把 Sequoia 装进 2008 年的机器下一篇5种策略彻底解决ComfyUI-Manager界面不显示问题从快速修复到环境重构ాలు创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

LinkSwift:如何快速简单地完成网盘直链解析,一键拿到 8 大网盘直链

LinkSwift:如何快速简单地完成网盘直链解析,一键拿到 8 大网盘直链

LinkSwift:如何快速简单地完成网盘直链解析,一键拿到 8 大网盘直链 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘…

2026/10/14 2:46:28 阅读更多 →
Spring Data JPA实战:实体映射、事务控制与N+1优化

Spring Data JPA实战:实体映射、事务控制与N+1优化

1. 项目概述:为什么一个“JPA实战Demo”值得花三小时重写五遍你是不是也经历过这样的场景:刚学完JPA的基础注解——Entity、Id、GeneratedValue,信心满满地新建一个User类,跑起来却报org.hibernate.MappingException: Unknown ent…

2026/10/14 2:46:28 阅读更多 →
Vue 3 轻量级数据透视表组件:支持拖拽+聚合+Excel导出

Vue 3 轻量级数据透视表组件:支持拖拽+聚合+Excel导出

简介:这是一份面向Vue.js中高级开发者的数据透视表功能实现组件包,专为需要在Web应用中快速集成交互式聚合分析表格的前端工程师设计。资源提供两个核心Vue组件:支持拖放配置行列的完整数据透视表,以及轻量级仅聚合功能的PivotTab…

2026/10/14 2:45:28 阅读更多 →

最新新闻

Virglrenderer 虚拟化技术深入解析 · 专栏目录

Virglrenderer 虚拟化技术深入解析 · 专栏目录

一套面向工程师的 virglrenderer 源码级技术专栏。从概述与演进讲起,再深入核心抽象、各后端实现、部署集成与工程实践。所有内容以仓库源码为准。 这里讲一下我为什么关注 virglrenderer,因为国产 GPU 的虚拟化需求。 随着国产化替代的推进&#xff0c…

2026/10/14 3:23:34 阅读更多 →
Kestrel_VLLM_CUDA - 04 · 分组量化 GEMM 内核

Kestrel_VLLM_CUDA - 04 · 分组量化 GEMM 内核

04 分组量化 GEMM 内核 一句话:一个内核同时服务 decode(M1)与 prefill(M32),用「每线程固定几列、沿 K 扫」的映射让权重按 warp 满事务读、激活广播;用 z-split 把小 M 的欠填充网格补满&…

2026/10/14 3:23:34 阅读更多 →
Spring Boot 单元测试怎么写?物联网平台 MockMvc 接口测试与 Mockito 消息链路测试实战(附 JaCoCo 覆盖率报告)

Spring Boot 单元测试怎么写?物联网平台 MockMvc 接口测试与 Mockito 消息链路测试实战(附 JaCoCo 覆盖率报告)

真实运行截图:一、功能都写完了,为什么还要写测试? 我这个物联网设备接入平台(Spring Boot 3.5 EMQX MySQL),从设备注册、MQTT 接入、消息入库到密钥轮换,功能主线已经跑通了。但每次面试话题…

2026/10/14 3:23:34 阅读更多 →
宁波执业律师张娟:配偶背的债你要还吗——夫妻共同债务认定规则拆解

宁波执业律师张娟:配偶背的债你要还吗——夫妻共同债务认定规则拆解

结论先行:配偶单方所负的债务,并不天然由你连带承担。民法典第1064条确立了共债共签原则——共同签字或事后追认、为家庭日常生活需要所负的债务才是共同债务;超出日常生活需要的,原则上由举债方自担,除非债权人能证明…

2026/10/14 3:23:34 阅读更多 →
铝制小青瓦筑就江南院墅 复刻黛瓦白墙的东方栖居

铝制小青瓦筑就江南院墅 复刻黛瓦白墙的东方栖居

坐落于苏州的拙政江南,以拙政园为文脉基底,打造连片式低密新中式院墅群落。白墙围合私家庭院,黛瓦错落铺陈屋面,亭廊婉转、叠石理水,将苏州园林的雅致意境藏进每一方栖居空间。项目全线屋面采用铝制小青瓦,以现代建材工艺复刻传统江南小青瓦的形与韵,更从根源破解传统陶瓦的运维…

2026/10/14 3:23:34 阅读更多 →
中国起名服务正在发生什么变化?从“大师经验”到专业化、品牌化服务

中国起名服务正在发生什么变化?从“大师经验”到专业化、品牌化服务

很长时间里,人们对于“找人起名”的想象都非常简单: 找一位有经验的老师, 报出生时间, 老师根据经验给出几个名字。 整个服务高度依赖: “这个大师厉不厉害”。 但今天再观察国内专业起名市场,会发现它已经…

2026/10/14 3:22:34 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →