【C#生态园】构建交互式界面利器:C#命令行解析库全方位评测

C#命令行利器:选择最适合你的命令行解析器

前言

在现代软件开发中,命令行解析器库是不可或缺的工具,它们为开发人员提供了简单、高效地处理命令行参数和构建交互式命令行界面的方法。本文将介绍几个用于C#的优秀命令行解析器库,分别探讨它们的核心功能、使用场景、安装配置以及API概览,帮助读者选择适合自己项目需求的工具。

欢迎订阅专栏:C#生态园

文章目录

  • C#命令行利器:选择最适合你的命令行解析器
    • 前言
    • 1. CommandLineParser:一个用于C#的命令行解析器库
      • 1.1 核心功能
      • 1.2 使用场景
    • 1.2 安装与配置
      • 1.2.1 安装指南
      • 1.2.2 基本配置
    • 1.3 API 概览
      • 1.3.1 参数定义
      • 1.3.2 解析方法
    • 2. CliFx:一个用于C#的命令行解析器库
      • 2.1 简介
        • 2.1.1 核心功能
        • 2.1.2 使用场景
      • 2.2 安装与配置
        • 2.2.1 安装方法
        • 2.2.2 基本设置
      • 2.3 API 概览
        • 2.3.1 命令定义
        • 2.3.2 参数解析
    • 3. Spectre.Console:一个用于构建交互式命令行界面的C#库
      • 3.1 简介
        • 3.1.1 核心功能
        • 3.1.2 使用场景
      • 3.2 安装与配置
        • 3.2.1 安装指导
        • 3.2.2 基本配置
      • 3.3 API 概览
        • 3.3.1 控件构建
        • 3.3.2 用户输入处理
    • 4. CommandDotNet:一个用于构建命令行应用程序的C#库
      • 4.1 简介
        • 4.1.1 核心功能
        • 4.1.2 使用场景
      • 4.2 安装与配置
        • 4.2.1 安装指南
        • 4.2.2 基本设置
      • 4.3 API 概览
        • 4.3.1 命令定义
        • 4.3.2 执行处理
    • 5. PowerArgs:一个用于创建命令行参数化CLI的C#库
      • 5.1 简介
        • 5.1.1 核心功能
        • 5.1.2 使用场景
      • 5.2 安装与配置
        • 5.2.1 安装指导
        • 5.2.2 基本配置
      • 5.3 API 概览
        • 5.3.1 参数定义
        • 5.3.2 参数解析
    • 6. McMaster.Extensions.CommandLineUtils:一个轻量级的命令行解析库,适用于.NET Core
      • 6.1 简介
        • 6.1.1 核心功能
        • 6.1.2 使用场景
      • 6.2 安装与配置
        • 6.2.1 安装指南
        • 6.2.2 基本设置
      • 6.3 API 概览
        • 6.3.1 命令定义
        • 6.3.2 参数解析
    • 总结

1. CommandLineParser:一个用于C#的命令行解析器库

1.1 核心功能

CommandLineParser 是一个专门为 C# 设计的命令行解析器库,能够帮助开发者轻松解析和处理命令行参数。它提供了丰富的功能,包括定义命令行参数、解析方法等。

1.2 使用场景

CommandLineParser 适用于需要在 C# 应用程序中处理命令行参数的场景,例如开发控制台应用程序或需要从命令行传递参数的工具程序等。

1.2 安装与配置

1.2.1 安装指南

要安装 CommandLineParser 库,可以通过 NuGet 包管理器搜索并安装 CommandLineParser 包,或者使用 Package Manager 控制台执行以下命令进行安装:

Install-Package CommandLineParser

1.2.2 基本配置

安装完毕后,需要在项目文件中引入命名空间:

using CommandLine;

1.3 API 概览

1.3.1 参数定义

在使用 CommandLineParser 解析命令行参数之前,首先需要定义参数模型。以下是一个简单的示例,定义了两个命令行参数 inputoutput

class Options
{[Option('i', "input", Required = true, HelpText = "Input file path")]public string InputFilePath { get; set; }[Option('o', "output", Required = true, HelpText = "Output file path")]public string OutputFilePath { get; set; }
}

在上述示例中,[Option] 属性用于标识命令行参数,并可以指定参数的短名称、长名称、是否必需等信息。

1.3.2 解析方法

定义好参数模型后,可以使用 CommandLineParser 来解析命令行参数。以下是一个简单示例:

class Program
{static void Main(string[] args){Parser.Default.ParseArguments<Options>(args).WithParsed(options =>{Console.WriteLine($"Input file: {options.InputFilePath}");Console.WriteLine($"Output file: {options.OutputFilePath}");});}
}

在以上示例中,ParseArguments<Options>(args) 方法用于解析命令行参数并映射到 Options 类型的实例上。随后的 WithParsed 方法则用于处理解析成功后的逻辑。

更多详细的使用方法和配置项,请参考 CommandLineParser 官方文档。

2. CliFx:一个用于C#的命令行解析器库

2.1 简介

CliFx 是一个用于 C# 的命令行解析器库,它提供了简单而强大的工具来解析和执行命令行参数。它基于 .NET Standard,并支持异步命令处理、自动验证和帮助文档生成等功能。

2.1.1 核心功能

CliFx 的核心功能包括:

  • 解析命令行参数
  • 异步命令处理
  • 自动验证
  • 生成帮助文档
2.1.2 使用场景

CliFx 可以广泛应用于需要构建命令行工具、控制台应用程序或者测试辅助工具的场景中。在需要处理命令行参数、执行特定命令或者生成帮助文档时,CliFx 都能提供便捷的解决方案。

2.2 安装与配置

2.2.1 安装方法

你可以通过 NuGet 包管理器或者 .NET CLI 来安装 CliFx 库。在控制台中执行以下命令即可完成安装:

dotnet add package CliFx
2.2.2 基本设置

安装完成后,你可以在项目中引入 CliFx 命名空间,并根据需求进行一些基本的配置。

2.3 API 概览

2.3.1 命令定义

在 CliFx 中,你可以通过定义继承自 Command 类的命令类来表示不同的命令。以下是一个简单的示例:

using CliFx;public class HelloWorldCommand : Command
{[CommandOption("name", 'n', IsRequired = true)]public string Name { get; set; }public override async ValueTask ExecuteAsync(IConsole console){await console.Output.WriteLineAsync($"Hello, {Name}!");}
}

在这个示例中,我们定义了一个名为 HelloWorldCommand 的命令,它包含了一个名为 name 的参数,并且在执行时会输出 “Hello, [Name]!” 的消息。

2.3.2 参数解析

CliFx 提供了丰富的参数解析功能,你可以通过属性注解来定义命令的参数。以下是一个示例:

using CliFx;public class GreetCommand : Command
{[CommandOption("name", 'n', Description = "Your name")]public string Name { get; set; } = "World"; // Default value is "World"[CommandOption("age", 'a', IsRequired = true, Description = "Your age")]public int Age { get; set; }public override async ValueTask ExecuteAsync(IConsole console){await console.Output.WriteLineAsync($"Hello, {Name}! You are {Age} years old.");}
}

在这个示例中,我们定义了一个名为 GreetCommand 的命令,它包含了 nameage 两个参数,并且对 age 参数进行了必填项的标记。

更多关于 CliFx 的详细信息,你可以访问 CliFx GitHub 页面 进行查看。

3. Spectre.Console:一个用于构建交互式命令行界面的C#库

Spectre.Console 是一个强大的 C# 库,用于构建优雅、交互式的命令行界面。它提供了丰富的控件和 API,使得在命令行中创建美观的用户界面成为可能。

3.1 简介

3.1.1 核心功能

Spectre.Console 提供了丰富的功能,包括但不限于:

  • 支持多种控件,如表格、进度条、提示框等,能够构建丰富的命令行界面。
  • 强大的文本格式化功能,支持颜色、格式等定制化设置。
  • 友好的用户输入处理,支持接收用户输入并进行相应处理。
3.1.2 使用场景

Spectre.Console 适用于需要在命令行环境下展示信息、与用户交互的各种应用场景,例如命令行工具、脚本等。

3.2 安装与配置

3.2.1 安装指导

Spectre.Console 可以通过 NuGet 进行安装。在 Visual Studio 中,可以通过 NuGet 包管理器搜索并安装 Spectre.Console。

Install-Package Spectre.Console

在 .NET Core 项目中,可以通过以下命令安装 Spectre.Console:

dotnet add package Spectre.Console

更多安装方式可参考 Spectre.Console 官方安装指南。

3.2.2 基本配置

安装完成后,在代码中引入 Spectre.Console 命名空间即可开始使用:

using Spectre.Console;

3.3 API 概览

3.3.1 控件构建

Spectre.Console 提供了多种控件来构建命令行界面。以下是一个示例,展示了如何创建一个简单的表格:

var table = new Table();table.AddColumn("Name");
table.AddColumn("Age");table.AddRow("Alice", "20");
table.AddRow("Bob", "25");AnsiConsole.Render(table);

通过以上代码,可以创建一个包含姓名和年龄信息的简单表格,并通过 AnsiConsole.Render 方法将其渲染到命令行上。更多关于控件的用法可参考 Spectre.Console 文档。

3.3.2 用户输入处理

Spectre.Console 提供了易用的用户输入处理功能。以下是一个示例,展示了如何获取用户输入并进行处理:

var name = AnsiConsole.Ask<string>("What is your name?");
AnsiConsole.MarkupLine($"[yellow]Hello[/] {name}!");

在这个例子中,AnsiConsole.Ask 方法用于向用户询问姓名,并返回用户输入的值。随后的 AnsiConsole.MarkupLine 则将带有颜色的问候语输出到命令行上。更多关于用户输入处理的用法可参考 Spectre.Console 文档。

4. CommandDotNet:一个用于构建命令行应用程序的C#库

4.1 简介

CommandDotNet 是一个用于构建命令行应用程序的 C# 库,它提供了丰富的功能和灵活的API,可以帮助开发人员快速构建强大的命令行工具。

4.1.1 核心功能

CommandDotNet 的核心功能包括:

  • 定义和解析命令行参数
  • 支持命令、子命令和选项
  • 提供丰富的扩展能力和插件机制
4.1.2 使用场景

CommandDotNet 可以广泛应用于需要构建命令行工具的场景,例如:

  • 开发自动化脚本工具
  • 构建命令行界面的应用程序
  • 快速生成命令行操作界面

4.2 安装与配置

4.2.1 安装指南

在使用 CommandDotNet 之前,需要先安装相应的 NuGet 包。可以通过以下方式安装 CommandDotNet:

dotnet add package CommandDotNet
4.2.2 基本设置

安装完成后,可以在 C# 代码中引入命名空间 CommandDotNet 来开始使用 CommandDotNet 库。

4.3 API 概览

CommandDotNet 提供了丰富的 API,下面将重点介绍其中的两个方面。

4.3.1 命令定义

在 CommandDotNet 中,可以通过定义命令来创建命令行工具的操作。以下是一个简单的示例,演示如何定义一个打印消息的命令:

using CommandDotNet;class Program
{static int Main(string[] args){return new AppRunner<PrintCommand>().Run(args);}
}[Command]
class PrintCommand
{public void Print([Operand] string message){Console.WriteLine($"Printed: {message}");}
}

在上面的示例中,首先定义了一个名为 PrintCommand 的命令,其包含了一个名为 Print 的方法,用于打印消息。通过运行 AppRunner,可以将该命令注册到命令行工具中。

详细文档可参考官方文档

4.3.2 执行处理

除了定义命令外,CommandDotNet 还提供了丰富的执行处理机制,可以对命令进行前置处理、后置处理以及异常处理。以下是一个示例,演示如何使用执行处理功能:

public class Program
{public static int Main(string[] args) => new AppRunner<TestCommands>().Run(args);[Command]public class TestCommands{public void DoSomething(){Console.WriteLine("Doing something");}}public class ExecutionMiddleware : IExecutionMiddleware{public Task PreInvoke(CommandContext commandContext){Console.WriteLine($"Before invoking '{commandContext.InvokedCommand.Name}'");return Task.CompletedTask;}public Task PostInvoke(CommandContext commandContext, CommandExecutionResult executionResult){Console.WriteLine($"After invoking '{commandContext.InvokedCommand.Name}'");return Task.CompletedTask;}}
}

在上面的示例中,定义了一个名为 ExecutionMiddleware 的执行处理中间件,用于在命令执行前后打印日志信息。通过添加执行处理中间件,可以实现对命令执行过程的精细控制。

以上是 CommandDotNet 库的简要介绍和部分 API 示例,通过这些功能,开发人员可以轻松地构建强大的命令行工具。详细内容请参考[官方文档](https://commanddotnet.bilal-fazlani

5. PowerArgs:一个用于创建命令行参数化CLI的C#库

PowerArgs 是一个用于在 C# 中创建命令行界面(CLI)的库,可以帮助开发者更方便地处理命令行参数。接下来将对 PowerArgs 进行详细介绍。

5.1 简介

5.1.1 核心功能

PowerArgs 可以帮助开发者轻松定义和解析命令行参数,并提供了丰富的选项和特性,包括参数验证、自动生成帮助文档等功能。通过 PowerArgs,开发者可以快速构建出强大而灵活的命令行工具。

5.1.2 使用场景

PowerArgs 适合用于需要创建复杂命令行工具的场景,比如用于自动化部署、数据处理、系统管理等领域。它能够帮助开发者简化命令行参数处理流程,提高开发效率。

5.2 安装与配置

5.2.1 安装指导

你可以通过 NuGet 来安装 PowerArgs 库。在 Visual Studio 中打开 NuGet 包管理器控制台,并执行以下命令来安装 PowerArgs:

Install-Package PowerArgs
5.2.2 基本配置

安装完成后,你可以直接在你的 C# 项目中引用 PowerArgs,开始使用它来处理命令行参数。

5.3 API 概览

5.3.1 参数定义

PowerArgs 提供了丰富的方式来定义命令行参数,包括普通参数、布尔参数、数组参数等。以下是一个简单的示例:

using PowerArgs;class Program
{public class MyArgs{[ArgRequired(PromptIfMissing = true)]public string Name { get; set; }[ArgDescription("The age of the person")]public int Age { get; set; }[ArgPosition(0)]public string PositionalArg { get; set; }}static void Main(string[] args){Args.InvokeAction<MyArgs>(args);}
}

在这个示例中,我们定义了一个名为 MyArgs 的参数类,其中包含了一个必须的 Name 参数、一个可选的 Age 参数和一个位置参数 PositionalArg。使用 Args.InvokeAction 方法可以将命令行参数映射到这个参数类的实例上。

了解更多参数定义的方式,请参考 PowerArgs 的官方文档。

5.3.2 参数解析

除了定义参数,PowerArgs 也提供了强大的参数解析功能,帮助开发者处理命令行参数。以下是一个简单的示例:

using PowerArgs;class Program
{public class MyArgs{[ArgRequired]public string Name { get; set; }[ArgDescription("The age of the person")]public int Age { get; set; }}static void Main(string[] args){var parsed = Args.Parse<MyArgs>(args);Console.WriteLine($"Name: {parsed.Name}, Age: {parsed.Age}");}
}

在这个示例中,我们使用 Args.Parse 方法来解析命令行参数,并获取参数的值进行后续处理。

以上是 PowerArgs 库的简单介绍和基本使用方法,不同的项目需求可能会有更复杂的使用方式,建议查阅官方文档来获得更详细的信息。

6. McMaster.Extensions.CommandLineUtils:一个轻量级的命令行解析库,适用于.NET Core

6.1 简介

McMaster.Extensions.CommandLineUtils 是一个轻量级的命令行解析库,可以帮助开发人员快速构建.NET Core应用程序中的命令行接口。它提供了简洁的API和丰富的功能,使得在.NET Core 应用中实现命令行解析变得更加简单和高效。

6.1.1 核心功能
  • 支持定义命令、子命令以及参数
  • 提供命令行选项的解析和验证功能
  • 友好的帮助信息生成
  • 具有灵活的配置选项
  • 支持自定义的验证和错误处理
6.1.2 使用场景
  • 构建.NET Core应用程序时需要添加命令行接口
  • 需要快速实现对命令行参数的解析和验证
  • 希望生成易于理解和友好的命令行帮助信息

6.2 安装与配置

McMaster.Extensions.CommandLineUtils 库可以通过NuGet进行安装。

6.2.1 安装指南
dotnet add package McMaster.Extensions.CommandLineUtils
6.2.2 基本设置

在使用之前,需要在代码文件中导入 McMaster.Extensions.CommandLineUtils 命名空间。

using McMaster.Extensions.CommandLineUtils;

6.3 API 概览

下面将介绍 McMaster.Extensions.CommandLineUtils 的一些核心API,并附上具体的C#示例代码。

6.3.1 命令定义

通过 CommandLineApplication 类,可以定义命令行应用程序及其选项和参数。

class Program
{static int Main(string[] args){var app = new CommandLineApplication();app.HelpOption("-?|-h|--help");app.OnExecute(() =>{Console.WriteLine("Hello, McMaster.Extensions.CommandLineUtils!");return 0;});return app.Execute(args);}
}

更多关于命令定义的详细信息,请参阅官方文档。

6.3.2 参数解析

McMaster.Extensions.CommandLineUtils 提供了方便的参数解析功能,可以轻松地处理命令行参数并进行验证。

class Program
{static int Main(string[] args){var app = new CommandLineApplication();app.HelpOption("-?|-h|--help");var optionA = app.Option("-a|--optionA", "Option A", CommandOptionType.SingleValue);app.OnExecute(() =>{if (optionA.HasValue()){Console.WriteLine($"Option A value: {optionA.Value()}");}else{Console.WriteLine("Option A not specified.");}return 0;});return app.Execute(args);}
}

更多关于参数解析的详细信息,请参阅官方文档。

总结

通过本文的介绍,读者可以清晰地了解这六个C#命令行解析器库的核心功能、使用场景、安装配置和API概览。每个库都有其独特之处,例如CommandLineParser适用于简单的命令行参数解析,Spectre.Console则专注于构建交互式命令行界面。针对不同的应用场景,开发人员可以根据需求灵活选择合适的库,提高开发效率和用户体验。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue2-elementUI-初始化启动项目-git

前置基础 资料下载-阿里云盘 vueaxioselement-uinpmvscode 初始化项目 1.创建vue2工程 1.1 vue create projectName1.2 选择 1.3 初始化 vue-cli 的核心步骤&#xff1a; Manually select features (*) Babel ( ) TypeScript ( ) Progressive Web App (PWA) Support …

【深度学习讲解笔记】前言

小编为AI专业的本科学生&#xff0c;最近入手了一本《深度学习讲解》的书&#xff0c;由于封面画了苹果&#x1f34e;&#xff0c;所以也叫苹果书&#xff0c;这本书目前在全网的热度很高。 本书是根据李宏毅老师讲授的《机器学习》课程编写的&#xff0c;作者是来自DataWhale…

Python QT实现A-star寻路算法

目录 1、界面使用方法 2、注意事项 3、补充说明 用Qt5搭建一个图形化测试寻路算法的测试环境。 1、界面使用方法 设定起点&#xff1a; 鼠标左键双击&#xff0c;设定红色的起点。左键双击设定起点&#xff0c;用红色标记。 设定终点&#xff1a; 鼠标右键双击&#xf…

Uniapp基于uni拦截器+Promise的请求函数封装

最近在学Uniapp&#xff0c;到封装请求的时候本来还想用axios&#xff0c;但是看到一些教学视频有更简单的方法&#xff0c; 基于uni的拦截器和Promise封装的请求函数 但是他们是用TS写的&#xff0c;还没学到TS&#xff0c;我就把JS写了&#xff0c;最终也是请求成功 // src/…

电动机制造5G智能工厂工业物联数字孪生平台,推进制造业数字化转型

电动机制造5G智能工厂工业物联数字孪生平台&#xff0c;推进制造业数字化转型。5G智能工厂与物联数字孪生平台的融合应用&#xff0c;为电动机制造业的数字化转型铺设了一条高速通道。这一创新模式不仅极大地提升了生产效率&#xff0c;还深刻改变了产品的设计、生产、管理及运…

EasyExcel模板导出与公式计算(下)

目录 环境要求 功能预览 需求分析 导入依赖 制作模板 编写代码 格式优化 最终效果 总结 在上一篇 EasyExcel模板导出与公式计算&#xff08;上&#xff09;-CSDN博客 文章中我们知道了在若依中使用自带的Excel注解来实现表格数据的导出&#xff0c;并且通过重写相关接…

【Python 千题 —— 算法篇】无重复字符最长子段

Python 千题持续更新中 …… 脑图地址 &#x1f449;&#xff1a;⭐https://twilight-fanyi.gitee.io/mind-map/Python千题.html⭐ 题目背景 在编程过程中&#xff0c;处理字符串的任务时常遇到&#xff0c;其中一个经典问题是查找无重复字符的最长子串。这在很多应用场景中…

redisson中的分布式锁

我的博客大纲 我的后端学习大纲 a.redisson概述&#xff1a; 1.Redisson是一个在Redis的基础上实现的Java驻内存数据网格&#xff08;In-Memory Data Grid&#xff09;2.redisson介绍官方文档地址&#xff1a;3.Redisson它不仅提供了一系列的分布式的Java常用对象&#xff0c;还…

使用vscode编辑matlab完美解决方法

vscode里面的matlab插件都不好用&#xff0c;需要搭配互补一下 1先安装MATLAB 这个插件可以进行代码高亮、格式化、跳转&#xff0c;F5运行所有代码&#xff0c;或者选中要运行的代码&#xff0c;右键单独运行&#xff0c; 优点&#xff1a;运行速度很快&#xff0c;和matlab里…

vcruntime140.dll丢失报错处理及dll下载修复方法

概述 vcruntime140.dll是Visual C Redistributable for Visual Studio的一个动态链接库文件。 如果你在运行某个程序时遇到了vcruntime140.dll丢失的错误&#xff0c;你可以尝试以下解决方法&#xff1a; 重新安装程序&#xff1a; 如果你只在运行某个特定程序时出现了该错误…

云手机怎样简化海外社媒平台运营

随着越来越多的卖家希望拓展海外市场&#xff0c;运营TikTok、Facebook等社交媒体平台已经成为吸引流量和促进销售的重要手段。然而&#xff0c;在管理海外社媒账号的过程中&#xff0c;许多人会面临网络连接的问题。这时&#xff0c;使用一款高效便捷的云手机工具就显得尤为便…

心理辅导新篇章:Spring Boot学生评估系统

1 绪论 1.1 研究背景 现在大家正处于互联网加的时代&#xff0c;这个时代它就是一个信息内容无比丰富&#xff0c;信息处理与管理变得越加高效的网络化的时代&#xff0c;这个时代让大家的生活不仅变得更加地便利化&#xff0c;也让时间变得更加地宝贵化&#xff0c;因为每天的…

JavaScript 循环控制语句-break和continue

break循环 首先i0&#xff0c;判断i是否<5,满足条件&#xff0c;判断i是否等于3&#xff0c;i不等于3&#xff0c;输出i0&#xff0c;i的值加1&#xff0c;判断i是否<5&#xff0c;判断i是否等于3&#xff0c;i不等于3&#xff0c;输出i1&#xff0c;i的值加1&#xff0c…

高精度加法,减法,乘法,除法

加法&#xff1a; 大整数该如何储存&#xff1f; 用数组储存&#xff1a; 把个位放在数下标为0的位置&#xff0c;十位放在数组下标为1的位置&#xff08;也就是高位放在数组的后面&#xff09; 因为这样&#xff0c;如果需要增加一位最高位&#xff0c;那我们就可以直接在…

前端基础 | HTML基础:HTML结构,HTML常见标签

文章目录 HTML1、HTML结构1.1HTML标签1.1.1标签1.1.2标签含义 1.2HTML文件基本结构1.3标签层次结构1.4 快速生成代码框架 2、HTML常见标签2.1注释标签2.2标题标签&#xff1a;h1–h62.3段落标签&#xff1a;p2.4 换行标签&#xff1a;br2.5格式化标签2.6 图片标签&#xff1a;i…

git submodule子模块的使用

子模块的使用 添加子模块 添加子模块 git submodule add <子仓库URL> <子仓库路径> 例子&#xff1a; git submodule add http://192.168.100.181/guideir/poco.git 3rdparty/poco 若子模块存在好几个分支&#xff0c;可以在添加子模块时&#xff0c;指定分支 g…

两个月冲刺软考——访问位与修改位的题型(淘汰哪一页);内聚的类型;关于码制的知识点;地址映射的相关内容

1.访问位与修改位的题型(淘汰哪一页) 访问位&#xff1a;为1时表示在内存期间被访问过&#xff0c;为0时表示未被访问&#xff1b;修改位&#xff1a;为1时表示该页面自从被装入内存后被修改过&#xff0c;为0时表示未修改过。 置换页面时&#xff0c;最先置换访问位和修改位为…

mac安装spark

参考&#xff1a;在Mac上安装Spark apache-spark-3.5.1_mac安装spark-CSDN博客 几个需要用到的路径&#xff1a; hadoop的bin目录&#xff1a;/opt/homebrew/Cellar/hadoop/3.4.0/bin spark的conf目录/opt/homebrew/Cellar/apache-spark/3.5.2/libexec/conf spark的bin目录&am…

iOS——retain和release底层原理

retain实现原理 retain的源码&#xff1a; //使用此方法等价于使用[this retain] inline id objc_object::retain() {//确保对象不是tagged pointerASSERT(!isTaggedPointer());return rootRetain(false, RRVariant::FastOrMsgSend); }ALWAYS_INLINE id objc_object::rootR…

VR虚拟展厅的应用场景有哪些?

虚拟展厅作为一种利用虚拟现实技术构建的三维展示空间&#xff0c;其应用场景广泛且多样。视创云展为企业虚拟展厅搭建提供技术支持。以下是一些主要的应用场景&#xff1a; 1. 博物馆和艺术展览 文物保护与展示&#xff1a; 在博物馆中&#xff0c;为了保护珍贵的文物和艺术…