学习elixir(1)

突然发现elixir很有趣,所以想记录以下学习内容

# .ex .exs file
elixir simple.exs
# mix new <app_name>
# mix deps.get; mix deps.update; mix deps.compile
# 怎么使用mix escript.build
# eg. 在mix.exs添加escript: [main_module: IntentionCLI, name: "intention"]
# livebook 
# 学习Phoenix web framework

以下是一些官方文档机器翻译(不具有可读性)

  • https://hexdocs.pm/phoenix/overview.html
Phoenix是一个用Elixir编写的web开发框架,它实现了服务器端的模型视图控制器(MVC)模式。它的许多组件和概念对于我们这些有过Ruby on Rails或Python的Django等其他web框架经验的人来说似乎很熟悉。
Phoenix提供了最好的两个世界——高开发效率和高应用程序性能。它也有一些有趣的新变化,如实现实时功能的通道和高速预编译模板。
如果你已经熟悉了仙丹,那太好了!如果没有,还有很多地方可以学习。灵药指南和灵药学习资源页面是两个很好的起点。
你正在看的指南提供了制造凤凰的所有部分的概述。以下是他们所提供服务的概要:
简介-你正在阅读的指南。它们将涵盖如何启动和运行您的第一个应用程序
指南——涵盖Phoenix和Phoenix应用程序中主要组件的深入指南
认证-深入指南,介绍如何使用mix phx.gen.auth
实时组件——涵盖Phoenix内置实时组件的深入指南
测试-关于测试的深入指南
部署-关于部署的深入指南
How-to's -关于如何用Phoenix实现某些事情的文章集
如果你想以EPUB的形式阅读这些指南,请点击这里!
注意,这些指南不是对Phoenix的逐步介绍。如果你想要一个更结构化的方法来学习框架,我们有一个很大的社区和许多书籍、课程和截屏。请查看我们的社区页面获取完整列表。
我们去装凤凰吧
  • https://hexdocs.pm/phoenix/installation.html
为了构建Phoenix应用程序,我们需要在操作系统中安装一些依赖项:Erlang VM和Elixir编程语言
数据库——Phoenix推荐PostgreSQL,但你也可以选择其他数据库或根本不用数据库
和其他可选软件包。请查看此列表,并确保为您的系统安装任何必要的东西。预先安装依赖项可以防止以后出现令人沮丧的问题。
灵药1.14或更高版本Phoenix是用Elixir编写的,我们的应用程序代码也将使用Elixir编写。没有它,我们在Phoenix应用程序中走不远!Elixir网站有一个很棒的安装页面可以提供帮助。如果我们第一次安装了Elixir,我们还需要安装Hex软件包管理器。Hex是运行Phoenix应用程序(通过安装依赖项)和安装我们可能需要的任何额外依赖项所必需的。以下是安装Hex的命令(如果您已经安装了Hex,它会将Hex升级到最新版本):mix local.hexErlang 24或更高版本Elixir代码编译成Erlang字节代码,以便在Erlang虚拟机上运行。没有Erlang,Elixir代码就没有虚拟机可以运行,所以我们也需要安装Erlang。当我们使用Elixir安装页面上的说明安装Elixir时,我们通常也会得到Erlang。如果Erlang没有随Elixir一起安装,请参阅Elixir安装页面的Erlang说明部分以获取说明。
凤凰要检查我们使用的是Elixir 1.14和Erlang 24或更高版本,请运行:酏剂-v
Erlang/OTP 24【ERTs-12.0】【源代码】【64位】【smp:8:8】【异步线程:10】【hipe】【内核轮询:false】【dtrace】长生不老药有了Elixir和Erlang之后,我们就可以安装Phoenix应用程序生成器了:mix archive.install hex phx_newphx.new生成器现在可用于在下一个指南《启动和运行》中生成新的应用程序。下面提到的标志是生成器的命令行选项;通过调用mix help phx.new查看所有可用选项。
一种数据库系统PostgreSQL是一个关系数据库服务器。Phoenix将应用程序配置为默认使用它,但我们可以在创建新应用程序时通过传递- database标志切换到MySQL、MSSQL或SQLite3。为了与数据库对话,Phoenix应用程序使用了另一个名为Ecto的灵药包。如果您不打算在应用程序中使用数据库,可以传递- no-ecto标志。但是,如果您刚刚开始使用Phoenix,我们建议您安装PostgreSQL并确保它正在运行。PostgreSQL wiki有许多不同系统的安装指南。
inotify工具(针对Linux用户)Phoenix提供了一个非常方便的功能,叫做实时重装。当您更改视图或资源时,它会自动在浏览器中重新加载页面。为了让这项功能发挥作用,您需要一个文件系统监视器。macOS和Windows用户已经有了文件系统监视器,但是Linux用户必须安装inotify-tools。请参考inotify-tools wiki获取特定于发行版的安装说明。
摘要在本节结束时,您必须已经安装了Elixir、Hex、Phoenix和PostgreSQL。现在我们已经安装好了所有的东西,让我们创建第一个Phoenix应用程序并开始运行。
  • https://hexdocs.pm/phoenix/up_and_running.html
运行正常的让我们尽快启动并运行一个Phoenix应用程序。开始之前,请花几分钟时间阅读安装指南。通过预先安装任何必要的依赖项,我们将能够让我们的应用程序顺利启动和运行。我们可以从任何目录运行mix phx.new来引导我们的Phoenix应用程序。Phoenix将接受我们新项目目录的绝对或相对路径。假设我们的应用程序的名称是hello,让我们运行以下命令:mix phx.new hello关于Ecto的说明:Ecto允许我们的Phoenix应用程序与数据存储进行通信,比如PostgreSQL、MySQL等等。如果我们的应用程序不需要这个组件,我们可以通过将- no-ecto标志传递给mix phx.new来跳过这个依赖项。要了解更多关于mix phx.new的内容,你可以阅读mix任务指南。mix phx.new hello
*创建hello/config/config.exs
*创建hello/config/dev.exs
*创建hello/config/prod.exs
...获取并安装依赖项?[Yn]Phoenix生成目录结构和我们的应用程序需要的所有文件。Phoenix提倡使用git作为版本控制软件:在生成的文件中,我们发现了一个. gitignore。我们可以将git初始化到我们的存储库中,并立即添加和提交所有没有被标记为忽略的文件。完成后,它会问我们是否希望它为我们安装依赖项。让我们同意吧。获取并安装依赖项?[Yn] Y
*运行mix deps.get
*运行混合资产.设置
*运行mix deps.compile我们快到了!缺少以下步骤:$ cd你好然后在config/dev.exs中配置您的数据库并运行:$ mix ecto.create启动您的Phoenix应用程序:$ mix phx.server您也可以在IEx (Interactive Elixir)中运行您的应用程序,如下所示:$ iex -S mix phx.server一旦我们的依赖项被安装,任务将提示我们进入我们的项目目录并启动我们的应用程序。
Phoenix假设我们的PostgreSQL数据库将有一个postgres用户帐户,该帐户具有正确的权限和密码“postgres”。如果不是这种情况,请参阅混合任务指南以了解有关混合ecto.create任务的更多信息。好吧,我们试试看。首先,我们将cd放入刚刚创建的hello/目录:cd你好现在我们将创建我们的数据库:mix ecto.create
正在编译13个文件(。ex)
生成的hello应用程序
你好的数据库。回购已创建如果无法创建数据库,请参见mix ecto.create的指南,了解一般故障排除。注意:如果这是您第一次运行这个命令,Phoenix可能还会要求安装Rebar。继续安装,因为Rebar用于构建Erlang包。最后,我们将启动Phoenix服务器:mix phx.server
[信息]运行HelloWeb。127.0.0.1:4000 (http)上带有cowboy 2.9.0的端点
[信息]访问HelloWeb。http://localhost:4000上的端点
[观察]构建完成,正在观察更改...
...如果我们在生成新的应用程序时选择不让Phoenix安装我们的依赖项,那么当我们确实想安装它们时,mix phx.new任务会提示我们采取必要的步骤。获取并安装依赖项?[Yn] n我们快到了!缺少以下步骤:$ cd你好
$ mix deps.get然后在config/dev.exs中配置您的数据库并运行:$ mix ecto.create启动您的Phoenix应用程序:$ mix phx.server您也可以在IEx (Interactive Elixir)中运行您的应用程序,如下所示:$ iex -S mix phx.server默认情况下,Phoenix接受端口4000上的请求。如果我们将最喜欢的web浏览器指向http://localhost:4000,我们应该会看到Phoenix Framework的欢迎页面。
如果你的屏幕看起来像上面的图像,那么恭喜你!您现在有了一个可以工作的Phoenix应用程序。如果您看不到上面的页面,请尝试通过http://127.0.0.1:4000访问它,然后确保您的操作系统已将“本地主机”定义为“127.0.0.1”。为了停止它,我们按了两次ctrl-c。现在您已经准备好探索凤凰城提供的世界了!查看我们的社区页面,获取书籍、视频、课程等信息。或者,您可以继续阅读这些指南,快速了解构成Phoenix应用程序的所有部分。如果是这样的话,你可以以任何顺序阅读指南,或者从解释Phoenix目录结构的指南开始。
  • https://hexdocs.pm/phoenix/packages_glossary.html
默认情况下,Phoenix应用程序依赖于几个具有不同用途的包。这个页面是您作为Phoenix开发人员可能使用的不同软件包的快速参考。主要的软件包有:一种集成查询和数据库包装器的语言Phoenix-Phoenix web框架(这些文档)Phoenix LiveView -使用服务器渲染的HTML构建丰富的实时用户体验。LiveView项目还定义了Phoenix。组件和HEEx模板引擎,用于在常规和实时应用程序中呈现HTML内容插件规范和构建可组合模块web应用程序的便利性。这是负责连接抽象和常规请求-响应生命周期的包您还将使用以下内容:ExUnit - Elixir的内置测试框架Gettext -通过Gettext实现国际化和本地化Swoosh -一个用于编写、发送和测试电子邮件的库,也由mix phx.gen.auth使用当在幕后窥视时,您会发现这些库在Phoenix应用程序中扮演着重要的角色:Phoenix HTML -安全使用HTML和表单的构建块Phoenix Ecto插件和协议实现一个支持在线状态的分布式发布/订阅系统关于仪器仪表和监控,请查看:Phoenix live dashboard-Phoenix开发人员的实时性能监控和调试工具遥测指标-基于遥测事件定义指标的通用界面
  • https://hexdocs.pm/phoenix/directory_structure.html
要求:本指南要求您已经完成了入门指南并启动和运行了Phoenix应用程序。当我们使用mix phx.new生成一个新的Phoenix应用程序时,它会构建一个顶级目录结构,如下所示:├──_建筑
├──资产公司
├──配置
├──警察局
├──自由报
│ ├──你好
│ ├── hello.ex
│ ├── hello_web
│ └── hello_web.ex
├──私立学校
└──试验我们将逐一查看这些目录:_build -由mix命令行工具创建的目录,作为保存所有编译工件的Elixir的一部分提供。正如我们在“启动和运行”中看到的那样,mix是您的应用程序的主界面。我们使用Mix来编译代码、创建数据库、运行服务器等等。此目录不得签入版本控制,并且可以随时移除。移除它将强制Mix从头开始重新构建应用程序。资产——保存前端资产源代码的目录,通常是JavaScript和CSS。esbuild工具会自动捆绑这些源代码。像图像和字体这样的静态文件放在priv/static中。保存项目配置的目录。config/config.exs文件是配置的入口点。在config/config.exs的末尾,它导入特定于环境的配置,这些配置可以在config/dev.exs、config/test.exs和config/prod.exs中找到。最后,执行config/runtime。exs,这是读取机密和其他动态配置的最佳位置。deps -包含我们所有混合依赖项的目录。您可以在defp deps do函数定义中找到mix.exs文件中列出的所有依赖项。此目录不得签入版本控制,并且可以随时移除。移除它将强制Mix从头开始下载所有dep。lib -保存应用程序源代码的目录。这个目录分为两个子目录,lib/hello和lib/hello_web。lib/hello目录将负责托管您的所有业务逻辑和业务域。它通常直接与数据库交互——它是模型-视图-控制器(MVC)架构中的“模型”。lib/hello_web负责向世界展示您的业务领域,在本例中是通过web应用程序。它同时拥有MVC的视图和控制器。我们将在下一节中更详细地讨论这些目录的内容。priv——一个目录,保存生产中所需的所有资源,但不是源代码的直接组成部分。您通常将数据库脚本、翻译文件、图像等保存在这里。默认情况下,从assets目录中的文件创建的生成资产放在priv/static/assets中。test -包含我们所有应用程序测试的目录。它通常反映了lib中的相同结构。lib/hello目录lib/hello目录托管您的所有业务域。因为我们的项目还没有任何业务逻辑,所以目录大部分是空的。您只会找到三个文件:lib/你好
├──应用程序
├──·梅勒
└──证券交易所lib/hello/application.ex文件定义了一个名为Hello.Application的Elixir应用程序。你好。应用模块定义了哪些服务是我们应用的一部分:儿童=【
你好。遥测技术,
你好。回购,
凤凰城。PubSub,名字:你好。PubSub},
你好。端点
]如果这是你第一次使用凤凰城,你现在不需要担心细节。现在,可以说我们的应用程序启动了一个数据库存储库、一个用于跨进程和节点共享消息的PubSub系统以及应用程序端点,该端点有效地服务于HTTP请求。这些服务按照定义的顺序启动,每当关闭应用程序时,它们都会以相反的顺序停止。您可以在Elixir的官方应用文档中了解更多有关应用程序的信息。lib/hello/mailer.ex文件保存hello。邮件模块,定义了发送电子邮件的主要界面:
你好。梅勒道
使用Swoosh。Mailer,otp_app::你好
结束在同一个lib/hello目录中,我们将找到一个lib/hello/repo.ex .它定义了一个hello。回购模块是我们与数据库的主要接口。如果您使用Postgres(默认数据库),您将看到如下内容:你好。回购do
使用Ecto。回购,
otp_app::你好,
适配器:Ecto。适配器。Postgres
结束暂时就这样了。当您在项目中工作时,我们将向该目录添加文件和模块。
lib/hello_web目录lib/hello_web目录保存了我们的应用程序中与web相关的部分。展开后看起来像这样:lib/你好网
├──控制器
│ ├── page_controller.ex
│ ├──页面_html.ex
│ ├──错误_html.ex
│ ├──错误_json.ex
│ └──网页_html
│ └──主页。home.html.heex
├──组件
│ ├──核心组件
│ ├──布局图。ex
│ └──版面设计
│ ├── app.html.heex
│ └──根。root.html.heex
├──端点。ex
├──新闻网
├──路由器。ex
└──遥测技术公司当前在控制器和组件目录中的所有文件都是为了创建“欢迎来到Phoenix!”我们在“启动和运行”指南中看到的页面。通过查看控制器和组件目录,我们可以看到Phoenix提供了开箱即用的处理布局、HTML和错误页面的功能。除了提到的目录之外,lib/hello_web的根目录下还有四个文件。lib/hello_web/endpoint.ex是HTTP请求的入口点。一旦浏览器访问http://localhost:4000,端点就开始处理数据,最终到达在lib/hello_web/router.ex中定义的路由器。路由器定义了向“控制器”发送请求的规则,控制器调用视图模块将HTML页面呈现回客户端。我们将在其他指南中详细探讨这些层,从接下来的“请求生命周期”指南开始。通过遥测技术,Phoenix能够收集指标并发送应用程序的监控事件。lib/hello_web/telemetry.ex文件定义了负责管理遥测过程的主管。您可以在遥测指南中找到关于此主题的更多信息。最后,还有一个lib/hello_web/gettext.ex文件,它通过gettext提供国际化。如果您不担心国际化,您可以安全地跳过该文件及其内容。
资产目录
资产目录包含与前端资产相关的源文件,如JavaScript和CSS。从Phoenix v1.6开始,我们使用esbuild来编译资产,资产由esbuild Elixir包管理。与esbuild的集成被嵌入到您的应用程序中。相关的配置可以在config/config.exs文件中找到。您的其他静态资产放在priv/static文件夹中,其中为生成的资产保存了priv/static/assets。priv/static中的所有内容都由该插件提供服务。在lib/hello_web/endpoint.ex中配置的静态插件。当在dev模式下运行时(MIX_ENV=dev),Phoenix会观察您在assets目录中所做的任何更改,然后在您工作时在浏览器中更新您的前端应用程序
请注意,当您第一次使用mix phx.new创建Phoenix应用程序时,可以指定影响资产目录的存在和布局的选项。事实上,Phoenix apps可以自带前端工具,或者根本没有前端(例如,如果您正在编写API,这很方便)。更多信息可以运行mix help phx.new或者查看Mix tasks中的文档。如果默认的esbuild集成不能满足您的需求,例如,因为您想要使用另一个构建工具,您可以切换到一个定制的资产构建。至于CSS,Phoenix附带了Tailwind CSS框架,为项目提供了一个基础设置。你可以选择任何一个CSS框架。其他参考资料可在《资产管理指南》中找到。

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

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

相关文章

Window在VScode运行C/C++程序

首先说明&#xff1a;不同运行环境&#xff08;Linux/Window&#xff09;下的头文件会有差异&#xff0c;要注意变换&#xff01;生成可执行文件 Window默认生成a.exe&#xff0c;Linux默认生成a.out # C源代码 g test.cpp # C语言源代码 g test.c 或 gcc test.c直接输入a.ex…

从零开始学逆向,js逆向启蒙:有道翻译

语言&#xff1a;js、python 工具&#xff1a;pycharm、chrome浏览器F12调试、chatgpt&#xff08;补充js第三方库&#xff0c;转python&#xff09;、node.js(js运行)&#xff08;必须&#xff09; 目标&#xff1a;学习掌握基本js逆向知识。 对象&#xff1a; 有道翻译 &a…

怎么判断同步时序逻辑电路和异步时序逻辑电路?

&#x1f3c6;本文收录于「Bug调优」专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&&…

力扣刷题---2418. 按身高排序【简单】

题目描述 给你一个字符串 数组 names &#xff0c;和一个由 互不相同 的正整数组成的数组 heights 。两个数组的长度均为 n 。 对于每个下标 i&#xff0c;names[i] 和 heights[i] 表示第 i 个人的名字和身高。 请按身高 降序 顺序返回对应的名字数组 names 。 示例 1&…

僵尸进程,孤儿进程,守护进程

【一】僵尸进程 1.僵尸进程是指完成自己的任务之后&#xff0c;没有被父进程回收资源,占用系统资源,对计算机有害&#xff0c;应该避免 """ 所有的子进程在运行结束之后都会变成僵尸进程(死了没死透)还保留着pid和一些运行过程的中的记录便于主进程查看(短时间…

嵌入式作业5

在函数main.c中初始化三种颜色的灯&#xff1a; gpio_init(LIGHT_BLUE, GPIO_OUTPUT, LIGHT_OFF); //蓝灯 gpio_init(LIGHT_GREEN, GPIO_OUTPUT, LIGHT_OFF); //绿灯 gpio_init(LIGHT_RED, GPIO_OUTPUT, LIGHT_OFF); //红灯 同时为了响应以上修改&#xff0c;进入isr。c…

STM32 CubeMX使用记录

取消DMA中断默认使能 DMA中断默认使能勾选无法取消选中 取消勾选Force DMA channels interrupts

cadence23---PCB Editer 学习笔记

1.交互式布局 在Orcad中点击图标N生成第一网表&#xff1a; 在PCB Editer中导入第一网表&#xff0c; 之后点击移动命令并在右侧属性框中勾选Symbol选项卡&#xff1a; 设置--应用模式--点击常规编辑&#xff1a; 之后就可以进行交互式选择了。 绿色图标为打开全部飞线&#…

web前端学习笔记11

11. CSS3高级特效 11.1 CSS3变形 CSS3变形是一些效果的集合, 如平移、旋转、缩放、倾斜效果 每个效果都可以称为变形(transform),它们可以分别操控元素发生平移、旋转、缩放、倾斜等变化 语法 transform:[transform-function] ; /* 设置变形函数,可以是一个,也可以是多…

2024年【N1叉车司机】考试题及N1叉车司机找解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 N1叉车司机考试题参考答案及N1叉车司机考试试题解析是安全生产模拟考试一点通题库老师及N1叉车司机操作证已考过的学员汇总&#xff0c;相对有效帮助N1叉车司机找解析学员顺利通过考试。 1、【多选题】《特种设备使用…

git使用介绍

一、为什么做版本控制&#xff08;git是版本控制工具&#xff09; 为了保留之前所以的版本&#xff0c;以便回滚和修改 二、点击安装 三、基础操作 1、初步认识 想要让git对一个目录进行版本控制需要以下步骤&#xff1a; 进入要管理的文件夹进行初始化命令 git init管理…

Amesim基础篇-元件详解-H型膨胀阀四象限解析

一 膨胀阀简介 膨胀阀的主要功能是节流和调节过热度,库内膨胀阀包含节流管、H型膨胀阀、T型膨胀阀三种: 节流管:一根内径较小的管路,当制冷剂通过他时发生等等焓降压降温,具有成本低,内径不可变的特点,因此普遍在家用空调中使用,在汽车空调上使用较少。当我们建模过程…

Linux虚拟主机中如何创建文件和文件夹

我想创建一个新的文件夹&#xff0c;由于我使用的Hostease的Linux虚拟主机产品默认带普通用户权限的cPanel面板&#xff0c;但是不知道如何在cPanel上操作创建文件&#xff0c;因为也是对于Hostease主机产品不是很了解&#xff0c;因此联系Hostease的咨询了Hostease技术支持&am…

JAVA线程池的线程数量配置

一 JAVA线程池的线程数量配置 关于线程的配置&#xff0c;线程数量配置多少这个问题呢&#xff1f;往往不同的环境与不同的线程中的代码决定其配置的线程的数量。 二 常见的线程量配置 最常见的方式根据线程中处理的代码划分为CPU密集型或IO密集型&#xff1a; CPU密集型&…

【多标签分类问题的样本挖掘】Pytorch中的TripletMarginLoss的样本挖掘

多数度量学习的代码都需要进行挖掘&#xff0c;样本挖掘过程就是把一个Batch中的所有样本&#xff0c;根据标签来划分成正样本和负样本 这里我们只讨论多标签分类问题&#xff0c;标签是onehot编码&#xff0c;如果是单标签分类任务可以去看pytorch_metric_learning这个库有实现…

学习Uni-app开发小程序Day18

昨天学习了使用轮播显示图片和文字&#xff0c;轮播方式纵向和横向。今天使用扩展组件和scroll-view显示图片&#xff0c;使用scroll-view的grid方式、插槽slot、自定义组件、磨砂背景定位布局做专题组件 这就是需要做成的效果&#xff0c;下面将一步一步的完成。 首先&#x…

如何高效创建与配置工程环境:零基础入门

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、工程环境的搭建与准备 二、配置虚拟环境与选择解释器 三、编写代码与自动添加多行注释 …

git describe --tags报错 fatal: No names found, cannot describe anything.

文章目录 git describe --tags报错 fatal: No names found, cannot describe anything. git describe --tags报错 fatal: No names found, cannot describe anything. 问题描述&#xff1a; git describe --tags fatal: No names found, cannot describe anything.原因分析&a…

SpringMVC笔记

一、SpringMVC 简介 1.1 什么是 MVC MVC 是一种软件架构的思想&#xff0c;将软件按照模型、视图、控制器来划分 1.M&#xff1a;Model 模型层&#xff0c;指工程中的 JavaBean &#xff0c;作用是处理数据 JavaBean 分为两类 实体类Bean&#xff1a;专门存储业务数据的…

C++vector的简单模拟实现

文章目录 目录 文章目录 前言 一、vector使用时的注意事项 1.typedef的类型 2.vector不是string 3.vector 4.算法sort 二、vector的实现 1.通过源码进行猜测vector的结构 2.初步vector的构建 2.1 成员变量 2.2成员函数 2.2.1尾插和扩容 2.2.2operator[] 2.2.3 迭代器 2…