-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathatom.xml
519 lines (258 loc) · 121 KB
/
atom.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>rm -rf /*</title>
<subtitle>rm -rf /*</subtitle>
<link href="https://rm-rf.ink/atom.xml" rel="self"/>
<link href="https://rm-rf.ink/"/>
<updated>2024-03-25T09:56:31.322Z</updated>
<id>https://rm-rf.ink/</id>
<author>
<name>Yq Woe</name>
</author>
<generator uri="https://hexo.io/">Hexo</generator>
<entry>
<title>redis主从-哨兵模式</title>
<link href="https://rm-rf.ink/*/8f0491a1.html"/>
<id>https://rm-rf.ink/*/8f0491a1.html</id>
<published>2024-03-25T09:56:30.000Z</published>
<updated>2024-03-25T09:56:31.322Z</updated>
<content type="html"><![CDATA[<div class="hbe hbe-container" id="hexo-blog-encrypt" data-wpm="糟糕!密码错误了." data-whm="抱歉, 这个文章不能被校验, 不过您还是能看看解密后的内容."> <script id="hbeData" type="hbeData" data-hmacdigest="d3d974b29008aff606283f0e4978d7bf8e58543d1d3a787740a0ae1e7049f1ed">89730641517f40fad9fb11d8e72e80bf06c939f51e30e9318348e356012ae93802623e7e7460999b3f7e8ba755c0d29599ae788f4544e2d8c77419f7d87eed449b7d6813e006fe13f540d0d66182fef8c50ebd9d211e40be206647f7e00fd685b86946fa705ad4651c18ab2a320b4a69699ab0980126725a179cb3c64faa8f2509c4dddd4adebe64d5cd4207643b74cb951ade33149cd6cd51d669bce78e7df026fe1abb945332d7c0a9e2f0c8bc51b46617f418a10ed53af1ad8a5de091ee7b9161a36c5a28454693301b254151eaad572fe3718480827cbcb2b29cbbe2dd52029dfad21eac08db5c648820175597abb4a0c5ff69693595d1d3fe51de4c4f9c4194b77a63e7b407560fa73f56328d3cbee56843f26b4272acb3eeeaa0e46d01c1c94262bdc858905a4d80759515d1db386e90b995b088a668ce7196174ca5a1b9fde0d6c59e81ace0635b7e811b6eb4</script> <div class="hbe hbe-content"> <div class="hbe hbe-input hbe-input-wave"> <input class="hbe hbe-input-field hbe-input-field-wave" type="password" id="hbePass"> <label class="hbe hbe-input-label hbe-input-label-wave" for="hbePass"> <span class="hbe hbe-input-label-content hbe-input-label-content-wave">输入密码查看内容</span> </label> <svg class="hbe hbe-graphic hbe-graphic-wave" width="300%" height="100%" viewBox="0 0 1200 60" preserveAspectRatio="none"> <path d="M0,56.5c0,0,298.666,0,399.333,0C448.336,56.5,513.994,46,597,46c77.327,0,135,10.5,200.999,10.5c95.996,0,402.001,0,402.001,0"></path> </svg> </div> </div></div><script data-pjax src="/lib/hbe.js"></script><link href="/css/hbe.style.css" rel="stylesheet" type="text/css">]]></content>
<summary type="html">文章加密了,需要输入密码查看</summary>
<category term="工作" scheme="https://rm-rf.ink/categories/%E5%B7%A5%E4%BD%9C/"/>
</entry>
<entry>
<title>rust-if-let简洁控制流</title>
<link href="https://rm-rf.ink/*/eec35d0e.html"/>
<id>https://rm-rf.ink/*/eec35d0e.html</id>
<published>2024-03-14T00:41:12.000Z</published>
<updated>2024-03-19T09:44:54.201Z</updated>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="/assets/css/APlayer.min.css"><script src="/assets/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="/assets/js/Meting.min.js"></script><h1 id="if-let-控制流"><a class="markdownIt-Anchor" href="#if-let-控制流"></a> if let 控制流</h1>]]></content>
<summary type="html"><link rel="stylesheet" class="aplayer-secondary-style-marker" href="/assets/css/APlayer.min.css"><script src="/assets/js/APlayer.min.js" cla</summary>
<category term="学习" scheme="https://rm-rf.ink/categories/%E5%AD%A6%E4%B9%A0/"/>
<category term="if" scheme="https://rm-rf.ink/tags/if/"/>
<category term="let" scheme="https://rm-rf.ink/tags/let/"/>
<category term="rust" scheme="https://rm-rf.ink/tags/rust/"/>
</entry>
<entry>
<title>rust-枚举与模式匹配</title>
<link href="https://rm-rf.ink/*/7d69317e.html"/>
<id>https://rm-rf.ink/*/7d69317e.html</id>
<published>2024-03-13T09:35:29.000Z</published>
<updated>2024-03-14T00:41:38.964Z</updated>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="/assets/css/APlayer.min.css"><script src="/assets/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="/assets/js/Meting.min.js"></script><h1 id="枚举"><a class="markdownIt-Anchor" href="#枚举"></a> 枚举</h1><blockquote><p>结构体给予你将字段和数据聚合在一起的方法,像 <code>Rectangle</code> 结构体有 <code>width</code> 和 <code>height</code> 两个字段。而枚举给予你一个途径去声明某个值是一个集合中的一员。比如,我们想让 <code>Rectangle</code> 是一些形状的集合,包含 <code>Circle</code> 和 <code>Triangle</code> 。为了做到这个,Rust 提供了枚举类型。</p></blockquote><figure class="highlight rust"><table><tr><td class="code"><pre><span class="line"></span><br><span class="line"><span class="meta">#[derive(Debug)]</span></span><br><span class="line"><span class="keyword">enum</span> <span class="title class_">IpAddrKind</span> {</span><br><span class="line"> <span class="title function_ invoke__">V4</span>(<span class="type">u8</span>,<span class="type">u8</span>,<span class="type">u8</span>,<span class="type">u8</span>),</span><br><span class="line"> <span class="title function_ invoke__">V6</span>(<span class="type">String</span>),</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="meta">#[derive(Debug)]</span></span><br><span class="line"><span class="keyword">enum</span> <span class="title class_">Message</span>{</span><br><span class="line"> Quit,</span><br><span class="line"> Move{x: <span class="type">i32</span>,y:<span class="type">i32</span>},</span><br><span class="line"> <span class="title function_ invoke__">Write</span>(<span class="type">String</span>),</span><br><span class="line"> <span class="title function_ invoke__">ChangeColor</span>(<span class="type">i32</span>,<span class="type">i32</span>,<span class="type">i32</span>),</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="keyword">impl</span> <span class="title class_">Message</span>{</span><br><span class="line"> <span class="keyword">fn</span> <span class="title function_">call</span>(&<span class="keyword">self</span>){</span><br><span class="line"> <span class="built_in">println!</span>(<span class="string">"self is {:?}"</span>,&<span class="keyword">self</span>)</span><br><span class="line"> }</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="keyword">fn</span> <span class="title function_">main</span>() {</span><br><span class="line"> <span class="built_in">println!</span>(<span class="string">"Hello, world!"</span>);</span><br><span class="line"></span><br><span class="line"> <span class="keyword">let</span> <span class="variable">four</span> = IpAddrKind::<span class="title function_ invoke__">V4</span>(<span class="number">127</span>,<span class="number">0</span>,<span class="number">0</span>,<span class="number">1</span>);</span><br><span class="line"> <span class="keyword">let</span> <span class="variable">six</span> = IpAddrKind::<span class="title function_ invoke__">V6</span>(<span class="type">String</span>::<span class="title function_ invoke__">from</span>(<span class="string">"::1"</span>));</span><br><span class="line"></span><br><span class="line"> dbg!(&four);</span><br><span class="line"> dbg!(&six);</span><br><span class="line"></span><br><span class="line"> <span class="keyword">let</span> <span class="variable">m</span> = Message::Move { x: <span class="number">1</span>, y: <span class="number">2</span> };</span><br><span class="line"> m.<span class="title function_ invoke__">call</span>();</span><br><span class="line">}</span><br><span class="line"></span><br></pre></td></tr></table></figure><h1 id="match匹配模式"><a class="markdownIt-Anchor" href="#match匹配模式"></a> match匹配模式</h1><h2 id="option枚举"><a class="markdownIt-Anchor" href="#option枚举"></a> Option枚举</h2><blockquote><p><code>Option</code> 是标准库定义的另一个枚举。<code>Option</code> 类型应用广泛因为它编码了一个非常普遍的场景,即一个值要么有值要么没值。</p></blockquote><figure class="highlight rust"><table><tr><td class="code"><pre><span class="line"><span class="meta">#[derive(Debug)]</span></span><br><span class="line"><span class="keyword">enum</span> <span class="title class_">Coin</span>{</span><br><span class="line"> Penny,</span><br><span class="line"> Nickel,</span><br><span class="line"> Dime,</span><br><span class="line"> Quarter,</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="keyword">fn</span> <span class="title function_">main</span>() {</span><br><span class="line"> <span class="built_in">println!</span>(<span class="string">"Hello, world!"</span>);</span><br><span class="line"> <span class="keyword">let</span> <span class="variable">v</span> = <span class="title function_ invoke__">value_in_cents</span>(Coin::Quarter);</span><br><span class="line"> <span class="built_in">println!</span>(<span class="string">"value_in_cents(coin) = {}"</span>, v);</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="keyword">fn</span> <span class="title function_">value_in_cents</span>(coin: Coin) <span class="punctuation">-></span> <span class="type">u32</span> {</span><br><span class="line"> <span class="keyword">match</span> coin {</span><br><span class="line"> Coin::Penny => <span class="number">1</span>,</span><br><span class="line"> Coin::Nickel => <span class="number">5</span>,</span><br><span class="line"> Coin::Dime => <span class="number">10</span>,</span><br><span class="line"> Coin::Quarter => <span class="number">25</span>,</span><br><span class="line"> }</span><br><span class="line">}</span><br><span class="line"></span><br></pre></td></tr></table></figure>]]></content>
<summary type="html"><link rel="stylesheet" class="aplayer-secondary-style-marker" href="/assets/css/APlayer.min.css"><script src="/assets/js/APlayer.min.js" cla</summary>
<category term="学习" scheme="https://rm-rf.ink/categories/%E5%AD%A6%E4%B9%A0/"/>
<category term="rust" scheme="https://rm-rf.ink/tags/rust/"/>
<category term="enum" scheme="https://rm-rf.ink/tags/enum/"/>
</entry>
<entry>
<title>rust-方法语法</title>
<link href="https://rm-rf.ink/*/d1274d86.html"/>
<id>https://rm-rf.ink/*/d1274d86.html</id>
<published>2024-03-13T09:18:32.000Z</published>
<updated>2024-03-13T09:35:30.501Z</updated>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="/assets/css/APlayer.min.css"><script src="/assets/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="/assets/js/Meting.min.js"></script><h1 id="方法语法"><a class="markdownIt-Anchor" href="#方法语法"></a> 方法语法</h1><blockquote><p><strong>方法</strong>(method)与函数类似:它们使用 <code>fn</code> 关键字和名称声明,可以拥有参数和返回值,同时包含在某处调用该方法时会执行的代码。不过方法与函数是不同的,因为它们在结构体的上下文中被定义(或者是枚举或 trait 对象的上下文,并且它们第一个参数总是 <code>self</code>,它代表调用该方法的结构体实例。</p></blockquote><h2 id="方法定义"><a class="markdownIt-Anchor" href="#方法定义"></a> 方法定义</h2><p>使用<code>impl</code>块为结构定义方法;</p><figure class="highlight rust"><table><tr><td class="code"><pre><span class="line"><span class="meta">#[derive(Debug)]</span></span><br><span class="line"><span class="keyword">struct</span> <span class="title class_">Rectangle</span> {</span><br><span class="line"> width: <span class="type">u32</span>,</span><br><span class="line"> height: <span class="type">u32</span>,</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="keyword">impl</span> <span class="title class_">Rectangle</span> {</span><br><span class="line"> <span class="keyword">fn</span> <span class="title function_">area</span>(&<span class="keyword">self</span>) <span class="punctuation">-></span> <span class="type">u32</span> {</span><br><span class="line"> <span class="keyword">self</span>.width * <span class="keyword">self</span>.height</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> <span class="keyword">fn</span> <span class="title function_">can_hold</span>(&<span class="keyword">self</span>,target: &Rectangle ) <span class="punctuation">-></span> <span class="type">bool</span> {</span><br><span class="line"> <span class="keyword">self</span>.width > target.width && <span class="keyword">self</span>.height > target.height</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> <span class="comment">// 关联函数经常被用作返回一个结构体新实例的构造函数。</span></span><br><span class="line"> <span class="comment">// 这些函数的名称通常为 new ,但 new 并不是一个关键字。</span></span><br><span class="line"> <span class="keyword">fn</span> <span class="title function_">square</span>(size: <span class="type">u32</span>) <span class="punctuation">-></span> <span class="keyword">Self</span>{</span><br><span class="line"> <span class="keyword">Self</span> {</span><br><span class="line"> width: size,</span><br><span class="line"> height: size,</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="keyword">fn</span> <span class="title function_">main</span>() {</span><br><span class="line"> <span class="keyword">let</span> <span class="variable">rect</span> = Rectangle::<span class="title function_ invoke__">square</span>(<span class="number">30</span>);</span><br><span class="line"></span><br><span class="line"> <span class="keyword">let</span> <span class="variable">rect1</span> = Rectangle { width: <span class="number">10</span>, height: <span class="number">30</span> };</span><br><span class="line"></span><br><span class="line"> <span class="keyword">let</span> <span class="variable">rect2</span> = Rectangle { width: <span class="number">60</span>, height: <span class="number">80</span> };</span><br><span class="line"> dbg!(&rect);</span><br><span class="line"> <span class="built_in">println!</span>(<span class="string">"The area of the rectangle is {} square pixels."</span>, rect.<span class="title function_ invoke__">area</span>());</span><br><span class="line"> <span class="built_in">println!</span>(<span class="string">"Can rect hold rect1? {}"</span>, rect.<span class="title function_ invoke__">can_hold</span>(&rect1));</span><br><span class="line"> <span class="built_in">println!</span>(<span class="string">"Can rect hold rect2? {}"</span>, rect.<span class="title function_ invoke__">can_hold</span>(&rect2));</span><br><span class="line">}</span><br></pre></td></tr></table></figure>]]></content>
<summary type="html"><link rel="stylesheet" class="aplayer-secondary-style-marker" href="/assets/css/APlayer.min.css"><script src="/assets/js/APlayer.min.js" cla</summary>
<category term="学习" scheme="https://rm-rf.ink/categories/%E5%AD%A6%E4%B9%A0/"/>
<category term="rust" scheme="https://rm-rf.ink/tags/rust/"/>
<category term="method" scheme="https://rm-rf.ink/tags/method/"/>
<category term="syntax" scheme="https://rm-rf.ink/tags/syntax/"/>
</entry>
<entry>
<title>rust-结构定义和实例化</title>
<link href="https://rm-rf.ink/*/e0d5ed17.html"/>
<id>https://rm-rf.ink/*/e0d5ed17.html</id>
<published>2024-03-13T08:53:22.000Z</published>
<updated>2024-03-13T09:23:11.291Z</updated>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="/assets/css/APlayer.min.css"><script src="/assets/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="/assets/js/Meting.min.js"></script><h1 id="结构定义"><a class="markdownIt-Anchor" href="#结构定义"></a> 结构定义</h1><blockquote><p>定义结构体,需要使用 <code>struct</code> 关键字并为整个结构体提供一个名字。结构体的名字需要描述它所组合的数据的意义。接着,在大括号中,定义每一部分数据的名字和类型,我们称为 <strong>字段</strong>(<em>field</em>)。</p></blockquote><p>以下演示了结构定义、打印对象、debug打印对象;</p><ul class="lvl-0"><li class="lvl-2"><p>可以定义有字段和无字段结构,包括类似<code>Tuple</code>(元组)的方式定义;</p></li><li class="lvl-2"><p><code>println!</code>和<code>dbg!</code>打印对象需要在结构上添加外部属性 <code>#[derive(Debug)]</code>;</p></li><li class="lvl-2"><p><code>dbg!</code>宏打印需要注意值引用;</p></li></ul><figure class="highlight rust"><table><tr><td class="code"><pre><span class="line"><span class="meta">#[derive(Debug)]</span></span><br><span class="line"><span class="keyword">struct</span> <span class="title class_">User</span> {</span><br><span class="line"> active: <span class="type">bool</span>,</span><br><span class="line"> username: <span class="type">String</span>,</span><br><span class="line"> email: <span class="type">String</span>,</span><br><span class="line"> sign_in_count: <span class="type">u64</span>,</span><br><span class="line">}</span><br><span class="line"><span class="meta">#[derive(Debug)]</span></span><br><span class="line"><span class="keyword">struct</span> <span class="title class_">Color</span>(<span class="type">i32</span>,<span class="type">i32</span>,<span class="type">i32</span>);</span><br><span class="line"><span class="meta">#[derive(Debug)]</span></span><br><span class="line"><span class="keyword">struct</span> <span class="title class_">Point</span>(<span class="type">i32</span>,<span class="type">i32</span>, <span class="type">i32</span>);</span><br><span class="line"><span class="meta">#[derive(Debug)]</span></span><br><span class="line"><span class="keyword">struct</span> <span class="title class_">AlwaysEqual</span>;</span><br><span class="line"></span><br><span class="line"><span class="meta">#[derive(Debug)]</span></span><br><span class="line"><span class="keyword">struct</span> <span class="title class_">Square</span>(<span class="type">u32</span>,<span class="type">u32</span>);</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="keyword">fn</span> <span class="title function_">main</span>() {</span><br><span class="line"> <span class="built_in">println!</span>(<span class="string">"Hello, world!"</span>);</span><br><span class="line"></span><br><span class="line"> <span class="keyword">let</span> <span class="keyword">mut </span><span class="variable">user</span> = <span class="title function_ invoke__">build_user</span>(<span class="string">"[email protected]"</span>,<span class="string">"dong33"</span>);</span><br><span class="line"></span><br><span class="line"> <span class="built_in">println!</span>(<span class="string">"user is {:?}"</span>,user);</span><br><span class="line"></span><br><span class="line"> <span class="keyword">let</span> <span class="keyword">mut </span><span class="variable">user1</span> = User{</span><br><span class="line"> active: <span class="literal">true</span>,</span><br><span class="line"> username: user.username,</span><br><span class="line"> email: user.email,</span><br><span class="line"> sign_in_count: <span class="number">1</span>,</span><br><span class="line"> };</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"> <span class="built_in">println!</span>(<span class="string">"user1 is {:?}"</span>,user1);</span><br><span class="line"> dbg!(user1);</span><br><span class="line"></span><br><span class="line"> <span class="keyword">let</span> <span class="variable">black</span> = <span class="title function_ invoke__">Color</span>(<span class="number">0</span>,<span class="number">0</span>,<span class="number">0</span>);</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"> <span class="built_in">println!</span>(<span class="string">"black is {:?}"</span>,black);</span><br><span class="line"> dbg!(black);</span><br><span class="line"></span><br><span class="line"> <span class="keyword">let</span> <span class="variable">origin</span> = <span class="title function_ invoke__">Point</span>(<span class="number">0</span>,<span class="number">0</span>,<span class="number">0</span>);</span><br><span class="line"></span><br><span class="line"> <span class="built_in">println!</span>(<span class="string">"origin is {:?}"</span>,origin);</span><br><span class="line"> dbg!(origin);</span><br><span class="line"></span><br><span class="line"> <span class="keyword">let</span> <span class="variable">subject</span> = AlwaysEqual;</span><br><span class="line"> <span class="built_in">println!</span>(<span class="string">"subject is {:?}"</span>,subject);</span><br><span class="line"> dbg!(subject);</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"> <span class="keyword">let</span> <span class="variable">width</span> = <span class="number">30</span>;</span><br><span class="line"> <span class="keyword">let</span> <span class="variable">height</span> = <span class="number">50</span>;</span><br><span class="line"></span><br><span class="line"> <span class="built_in">println!</span>(<span class="string">" area is {}"</span>,<span class="title function_ invoke__">area</span>(width, height));</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"> <span class="keyword">let</span> <span class="variable">rect</span> = <span class="title function_ invoke__">Square</span>(<span class="number">30</span>,<span class="number">50</span>);</span><br><span class="line"> <span class="built_in">println!</span>(<span class="string">"rect is {:?}"</span>,rect);</span><br><span class="line"> dbg!(&rect);</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"> <span class="built_in">println!</span>(<span class="string">"square area is {}"</span>,<span class="title function_ invoke__">area_square</span>(&rect));</span><br><span class="line"></span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="keyword">fn</span> <span class="title function_">build_user</span>(email: &<span class="type">str</span>,username: &<span class="type">str</span>) <span class="punctuation">-></span> User {</span><br><span class="line"> User {</span><br><span class="line"> active: <span class="literal">true</span>,</span><br><span class="line"> username: <span class="type">String</span>::<span class="title function_ invoke__">from</span>(username),</span><br><span class="line"> email: <span class="type">String</span>::<span class="title function_ invoke__">from</span>(email),</span><br><span class="line"> sign_in_count: <span class="number">1</span>,</span><br><span class="line"> }</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="keyword">fn</span> <span class="title function_">area</span>(width: <span class="type">u32</span>,height: <span class="type">u32</span>) <span class="punctuation">-></span> <span class="type">u32</span>{</span><br><span class="line"> width * height</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="keyword">fn</span> <span class="title function_">area_square</span>(square: &Square) <span class="punctuation">-></span> <span class="type">u32</span>{</span><br><span class="line"> square.<span class="number">0</span> * square.<span class="number">1</span></span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"></span><br></pre></td></tr></table></figure>]]></content>
<summary type="html"><link rel="stylesheet" class="aplayer-secondary-style-marker" href="/assets/css/APlayer.min.css"><script src="/assets/js/APlayer.min.js" cla</summary>
<category term="学习" scheme="https://rm-rf.ink/categories/%E5%AD%A6%E4%B9%A0/"/>
<category term="rust" scheme="https://rm-rf.ink/tags/rust/"/>
<category term="struct" scheme="https://rm-rf.ink/tags/struct/"/>
</entry>
<entry>
<title>rust入门</title>
<link href="https://rm-rf.ink/*/94fe59ce.html"/>
<id>https://rm-rf.ink/*/94fe59ce.html</id>
<published>2024-03-11T01:30:48.000Z</published>
<updated>2024-03-13T08:53:31.213Z</updated>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="/assets/css/APlayer.min.css"><script src="/assets/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="/assets/js/Meting.min.js"></script><h1 id="cargo是什么"><a class="markdownIt-Anchor" href="#cargo是什么"></a> Cargo是什么?</h1><p><code>Cargo</code>是rust的构建工具、包管理器;</p><h3 id="crate是什么"><a class="markdownIt-Anchor" href="#crate是什么"></a> crate是什么?</h3><p> crate类似npm package或ruby gem,类似<code>依赖包</code>的意思;</p><h1 id="rust和动态语言对比"><a class="markdownIt-Anchor" href="#rust和动态语言对比"></a> rust和动态语言对比</h1><h1 id="rust库"><a class="markdownIt-Anchor" href="#rust库"></a> rust库</h1><h3 id="std-io标准库"><a class="markdownIt-Anchor" href="#std-io标准库"></a> std io标准库</h3><h3 id="let声明变量"><a class="markdownIt-Anchor" href="#let声明变量"></a> let声明变量</h3><figure class="highlight rust"><table><tr><td class="code"><pre><span class="line"><span class="keyword">let</span> <span class="variable">apples</span> = <span class="number">5</span>; <span class="comment">// 不可变</span></span><br><span class="line"><span class="keyword">let</span> <span class="keyword">mut </span><span class="variable">bananas</span> = <span class="number">5</span>; <span class="comment">// 可变</span></span><br></pre></td></tr></table></figure><h3 id="整型"><a class="markdownIt-Anchor" href="#整型"></a> 整型</h3><table><thead><tr><th>长度</th><th>有符号</th><th>无符号</th></tr></thead><tbody><tr><td>8-bit</td><td>i8</td><td>U8</td></tr><tr><td>16-bit</td><td>i16</td><td>u16</td></tr><tr><td>32-bit</td><td>i32</td><td>u32</td></tr><tr><td>64-bit</td><td>i64</td><td>U64</td></tr><tr><td>128-bit</td><td>i128</td><td>u128</td></tr><tr><td>arch(由CPU架构决定大小 x86为32位,x64为64位)</td><td>isize</td><td>Usize</td></tr></tbody></table><table><thead><tr><th>数字字面值</th><th>例子</th></tr></thead><tbody><tr><td>Decimal(十进制)</td><td>98_222</td></tr><tr><td>Hex(十六进制)</td><td>0xff</td></tr><tr><td>Octal(八进制)</td><td>0o77</td></tr><tr><td>Binary(二进制)</td><td>0b1111_0000</td></tr><tr><td>Byte(单字节字符)(仅限于u8)</td><td>b’A’</td></tr></tbody></table><h3 id="浮点型"><a class="markdownIt-Anchor" href="#浮点型"></a> 浮点型</h3><p>Rust的浮点数类型是 <code>f32</code>和<code>f64</code>,分别占32位和64位,默认类型是<code>f64</code></p><p>浮点数采用 IEEE-754 标准表示。<code>f32</code> 是单精度浮点数,<code>f64</code> 是双精度浮点数。</p><h3 id="布尔型"><a class="markdownIt-Anchor" href="#布尔型"></a> 布尔型</h3><p>Rust的布尔类型有两个值: <code>true</code>和<code>false</code>,使用 <code>bool</code>表示;</p><h3 id="字符类型"><a class="markdownIt-Anchor" href="#字符类型"></a> 字符类型</h3><p>Rust的 <code>char</code>类型是语言中原生的字符类型;使用 <code>''</code>声明字符类型,字符串使用 <code>""</code>声明;</p><h3 id="复合类型"><a class="markdownIt-Anchor" href="#复合类型"></a> 复合类型</h3><p>Rust有两个原生复合类型: 元组(tuple)和数组 (array)</p><h4 id="元组-tuple"><a class="markdownIt-Anchor" href="#元组-tuple"></a> 元组 Tuple</h4><figure class="highlight rust"><table><tr><td class="code"><pre><span class="line"><span class="keyword">fn</span> <span class="title function_">main</span>() {</span><br><span class="line"> <span class="keyword">let</span> <span class="variable">x</span>: (<span class="type">i32</span>, <span class="type">f64</span>, <span class="type">u8</span>) = (<span class="number">500</span>, <span class="number">6.4</span>, <span class="number">1</span>);</span><br><span class="line"></span><br><span class="line"> <span class="keyword">let</span> <span class="variable">five_hundred</span> = x.<span class="number">0</span>;</span><br><span class="line"></span><br><span class="line"> <span class="keyword">let</span> <span class="variable">six_point_four</span> = x.<span class="number">1</span>;</span><br><span class="line"></span><br><span class="line"> <span class="keyword">let</span> <span class="variable">one</span> = x.<span class="number">2</span>;</span><br><span class="line">}</span><br></pre></td></tr></table></figure><h4 id="数组-array"><a class="markdownIt-Anchor" href="#数组-array"></a> 数组 Array</h4><figure class="highlight rust"><table><tr><td class="code"><pre><span class="line"><span class="keyword">let</span> <span class="variable">a</span>: [<span class="type">i32</span>; <span class="number">5</span>] = [<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>, <span class="number">5</span>];</span><br><span class="line"></span><br><span class="line"><span class="keyword">let</span> <span class="variable">first</span> = a[<span class="number">0</span>];</span><br><span class="line"><span class="keyword">let</span> <span class="variable">end</span> = a[<span class="number">4</span>];</span><br></pre></td></tr></table></figure><h3 id="fn-main"><a class="markdownIt-Anchor" href="#fn-main"></a> fn、main</h3><p><code>fn</code>用于声明函数,<code>main</code>函数为程序入口;</p><p>在函数声明中,必须声明每个参数的类型。</p><figure class="highlight rust"><table><tr><td class="code"><pre><span class="line"><span class="keyword">fn</span> <span class="title function_">main</span>(){</span><br><span class="line"><span class="title function_ invoke__">print_labeled_measurement</span>(<span class="number">5</span>,<span class="string">'h'</span>);</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="keyword">fn</span> <span class="title function_">print_labeled_measurement</span>(value: <span class="type">i32</span>,unit_label: <span class="type">char</span>){</span><br><span class="line"> <span class="built_in">println!</span>(<span class="string">"The measurement is: {value}{unit_label}"</span>)</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="keyword">fn</span> <span class="title function_">five</span>() <span class="punctuation">-></span> <span class="type">i32</span>{</span><br><span class="line"> <span class="number">5</span></span><br><span class="line">}</span><br></pre></td></tr></table></figure><p>语句和表达式的区别,语句需要<code>;</code>修饰,表达式不需要。</p><figure class="highlight rust"><table><tr><td class="code"><pre><span class="line"><span class="keyword">fn</span> <span class="title function_">main</span>() {</span><br><span class="line"> <span class="keyword">let</span> <span class="variable">x</span> = <span class="title function_ invoke__">plus_one</span>(<span class="number">5</span>); <span class="comment">//语句</span></span><br><span class="line"></span><br><span class="line"> <span class="built_in">println!</span>(<span class="string">"The value of x is: {x}"</span>); <span class="comment">//语句</span></span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="keyword">fn</span> <span class="title function_">plus_one</span>(x: <span class="type">i32</span>) <span class="punctuation">-></span> <span class="type">i32</span> {</span><br><span class="line"> x + <span class="number">1</span> <span class="comment">//表达式</span></span><br><span class="line">}</span><br><span class="line"></span><br></pre></td></tr></table></figure><h5 id="练习-斐波那契数列"><a class="markdownIt-Anchor" href="#练习-斐波那契数列"></a> <strong>练习-斐波那契数列</strong></h5><figure class="highlight rust"><table><tr><td class="code"><pre><span class="line"><span class="keyword">fn</span> <span class="title function_">main</span>() {</span><br><span class="line"> <span class="title function_ invoke__">fibonacci</span>(<span class="number">22</span>);</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="keyword">fn</span> <span class="title function_">fibonacci</span>(n: <span class="type">i32</span>) <span class="punctuation">-></span> <span class="type">i32</span> {</span><br><span class="line"> <span class="keyword">match</span> n {</span><br><span class="line"> <span class="number">0</span> => <span class="number">0</span>,</span><br><span class="line"> <span class="number">1</span> =><span class="number">1</span>,</span><br><span class="line"> <span class="number">2</span> => <span class="number">1</span>,</span><br><span class="line"> _ => <span class="title function_ invoke__">fibonacci</span>(n-<span class="number">1</span>) + <span class="title function_ invoke__">fibonacci</span>(n-<span class="number">2</span>),</span><br><span class="line"> }</span><br><span class="line">}</span><br><span class="line"></span><br></pre></td></tr></table></figure><h3 id="注释"><a class="markdownIt-Anchor" href="#注释"></a> 注释</h3><figure class="highlight rust"><table><tr><td class="code"><pre><span class="line"><span class="comment">//这是第一行注释</span></span><br><span class="line"><span class="comment">//这是第二行注释</span></span><br><span class="line"><span class="comment">//这是第三行注释</span></span><br></pre></td></tr></table></figure><h4 id="文档注释"><a class="markdownIt-Anchor" href="#文档注释"></a> 文档注释</h4><figure class="highlight rust"><table><tr><td class="code"><pre><span class="line"><span class="comment">///这是第一行注释</span></span><br><span class="line"><span class="comment">///这是第二行注释</span></span><br><span class="line"><span class="comment">///这是第三行注释</span></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="comment">//! #这是第一行注释</span></span><br><span class="line"><span class="comment">//!</span></span><br><span class="line"><span class="comment">//! ###这是第三行注释</span></span><br></pre></td></tr></table></figure><h3 id="if表达式"><a class="markdownIt-Anchor" href="#if表达式"></a> if表达式</h3><figure class="highlight rust"><table><tr><td class="code"><pre><span class="line"><span class="keyword">fn</span> <span class="title function_">main</span>(){</span><br><span class="line"> <span class="keyword">let</span> <span class="variable">number</span> = <span class="number">3</span>;</span><br><span class="line"> <span class="keyword">if</span> number < <span class="number">3</span> {</span><br><span class="line"> printlin!(<span class="string">"Number is less than 3 "</span>)</span><br><span class="line"> }<span class="keyword">else</span>{</span><br><span class="line"> printlin!(<span class="string">"Number is greater than or equal to 3 "</span>)</span><br><span class="line"> }</span><br><span class="line">}</span><br></pre></td></tr></table></figure><h4 id="在let语句中使用if-else"><a class="markdownIt-Anchor" href="#在let语句中使用if-else"></a> 在let语句中使用if else</h4><p>提示: if else的分支类型要匹配,否则会提示编译错误</p><figure class="highlight rust"><table><tr><td class="code"><pre><span class="line"><span class="keyword">fn</span> <span class="title function_">main</span>(){</span><br><span class="line"><span class="keyword">let</span> <span class="variable">number</span> = <span class="number">3</span>;</span><br><span class="line"><span class="keyword">let</span> <span class="variable">result</span> = <span class="keyword">if</span> number >= <span class="number">3</span> { <span class="number">10</span> } <span class="keyword">else</span> {<span class="number">0</span>};</span><br><span class="line"><span class="built_in">println!</span>(<span class="string">"The value of number is: {result}"</span>)</span><br><span class="line">}</span><br></pre></td></tr></table></figure><h3 id="loop循环"><a class="markdownIt-Anchor" href="#loop循环"></a> loop循环</h3><figure class="highlight rust"><table><tr><td class="code"><pre><span class="line"><span class="keyword">fn</span> <span class="title function_">main</span>() {</span><br><span class="line"> <span class="keyword">let</span> <span class="keyword">mut </span><span class="variable">count</span> = <span class="number">0</span>;</span><br><span class="line"></span><br><span class="line"> <span class="symbol">'counting_up</span>: <span class="keyword">loop</span> {</span><br><span class="line"> <span class="built_in">println!</span>(<span class="string">"count = {count}"</span>);</span><br><span class="line"> <span class="keyword">let</span> <span class="keyword">mut </span><span class="variable">remaining</span> = <span class="number">10</span>;</span><br><span class="line"></span><br><span class="line"> <span class="keyword">loop</span>{</span><br><span class="line"> <span class="built_in">println!</span>(<span class="string">"remaining = {remaining}"</span>);</span><br><span class="line"> <span class="keyword">if</span> remaining == <span class="number">9</span> {</span><br><span class="line"> <span class="keyword">break</span>;</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> <span class="keyword">if</span> count == <span class="number">2</span>{</span><br><span class="line"> <span class="keyword">break</span> <span class="symbol">'counting_up</span>;</span><br><span class="line"> }</span><br><span class="line"> remaining -= <span class="number">1</span>;</span><br><span class="line"> }</span><br><span class="line"> count += <span class="number">1</span>;</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> <span class="built_in">println!</span>(<span class="string">"End count = {count}"</span>)</span><br><span class="line"></span><br><span class="line">}</span><br></pre></td></tr></table></figure><h3 id="while循环"><a class="markdownIt-Anchor" href="#while循环"></a> while循环</h3><figure class="highlight rust"><table><tr><td class="code"><pre><span class="line"><span class="keyword">fn</span> <span class="title function_">main</span>(){</span><br><span class="line"><span class="keyword">let</span> <span class="keyword">mut </span><span class="variable">number</span> = <span class="number">3</span>;</span><br><span class="line"></span><br><span class="line"> <span class="keyword">while</span> number != <span class="number">0</span> {</span><br><span class="line"> <span class="built_in">println!</span>(<span class="string">"{number}"</span>);</span><br><span class="line"> number -= <span class="number">1</span>;</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> <span class="built_in">println!</span>(<span class="string">"End"</span>);</span><br><span class="line">}</span><br></pre></td></tr></table></figure><h3 id="for循环"><a class="markdownIt-Anchor" href="#for循环"></a> for循环</h3><figure class="highlight rust"><table><tr><td class="code"><pre><span class="line"><span class="keyword">fn</span> <span class="title function_">main</span>(){</span><br><span class="line"><span class="keyword">let</span> <span class="variable">a</span> = [<span class="number">10</span>,<span class="number">20</span>,<span class="number">30</span>,<span class="number">40</span>,<span class="number">50</span>];</span><br><span class="line"></span><br><span class="line"> <span class="keyword">for</span> <span class="variable">element</span> <span class="keyword">in</span> a {</span><br><span class="line"> <span class="built_in">println!</span>(<span class="string">"the value is: {element}"</span>);</span><br><span class="line"> }</span><br><span class="line">}</span><br></pre></td></tr></table></figure><h3 id="match-分支"><a class="markdownIt-Anchor" href="#match-分支"></a> match 分支</h3><p>用于分支判断,类似其他语言的switch(condition){}</p><figure class="highlight rust"><table><tr><td class="code"><pre><span class="line"><span class="keyword">let</span> <span class="variable">guess</span>: <span class="type">u32</span> = <span class="keyword">match</span> guess.<span class="title function_ invoke__">trim</span>().<span class="title function_ invoke__">parse</span>() {</span><br><span class="line"> <span class="title function_ invoke__">Ok</span>(num) => num,</span><br><span class="line"> <span class="title function_ invoke__">Err</span>(_) => <span class="keyword">continue</span>,</span><br><span class="line"> };</span><br></pre></td></tr></table></figure><h3 id="const-常量"><a class="markdownIt-Anchor" href="#const-常量"></a> const 常量</h3><p>常量和其他语言类似,约定大写+<code>_</code>命名</p><h3 id="所有权ownership"><a class="markdownIt-Anchor" href="#所有权ownership"></a> 所有权(ownership)</h3><ul class="lvl-0"><li class="lvl-2"><p>堆: 先进先出;</p></li><li class="lvl-2"><p>栈: 先进后出;</p></li></ul><h4 id="所有权规则"><a class="markdownIt-Anchor" href="#所有权规则"></a> 所有权规则</h4><ul class="lvl-0"><li class="lvl-2"><p>rust 中的每一个值都有一个 <code>owner</code>;</p></li><li class="lvl-2"><p>值在任一时刻有且只有一个<code>owner</code>;</p></li><li class="lvl-2"><p>当<code>owner</code>离开作用域,这个值将被丢弃;</p></li></ul><h4 id="变量作用域"><a class="markdownIt-Anchor" href="#变量作用域"></a> 变量作用域</h4><figure class="highlight rust"><table><tr><td class="code"><pre><span class="line">{ <span class="comment">// s 在这里无效,它尚未声明</span></span><br><span class="line"> <span class="keyword">let</span> <span class="variable">s</span> = <span class="string">"hello"</span>; <span class="comment">// 从此处起,s 是有效的</span></span><br><span class="line"> <span class="comment">// 使用 s</span></span><br><span class="line"> } <span class="comment">// 此作用域已结束,s 不再有效</span></span><br></pre></td></tr></table></figure><h3 id="string-类型"><a class="markdownIt-Anchor" href="#string-类型"></a> String 类型</h3><blockquote><p>如果你在其他语言中听说过术语 <strong>浅拷贝</strong>(<em>shallow copy</em>)和 <strong>深拷贝</strong>(<em>deep copy</em>),那么拷贝指针、长度和容量而不拷贝数据可能听起来像浅拷贝。不过因为 Rust 同时使第一个变量无效了,这个操作被称为 <strong>移动</strong>(<em>move</em>),而不是叫做浅拷贝。上面的例子可以解读为 <code>s1</code> 被 <strong>移动</strong> 到了 <code>s2</code> 中。</p></blockquote><figure class="highlight rust"><table><tr><td class="code"><pre><span class="line"><span class="keyword">let</span> <span class="variable">s1</span> = <span class="type">String</span>::<span class="title function_ invoke__">from</span>(<span class="string">"hello"</span>);</span><br><span class="line"><span class="keyword">let</span> <span class="variable">s2</span> = s1;</span><br><span class="line"> <span class="comment">//-- value moved here</span></span><br><span class="line"><span class="built_in">println!</span>(<span class="string">"{s1}"</span>);</span><br><span class="line"><span class="comment">//^^^^ value borrowed here after move</span></span><br></pre></td></tr></table></figure><h3 id="copy类型"><a class="markdownIt-Anchor" href="#copy类型"></a> <code>Copy</code>类型</h3><ul class="lvl-0"><li class="lvl-2"><p>所有整数类型,比如 <code>u32</code>。</p></li><li class="lvl-2"><p>布尔类型,<code>bool</code>,它的值是 <code>true</code> 和 <code>false</code>。</p></li><li class="lvl-2"><p>所有浮点数类型,比如 <code>f64</code>。</p></li><li class="lvl-2"><p>字符类型,<code>char</code>。</p></li><li class="lvl-2"><p>元组,当且仅当其包含的类型也都实现 <code>Copy</code> 的时候。比如,<code>(i32, i32)</code> 实现了 <code>Copy</code>,但 <code>(i32, String)</code> 就没有。</p></li></ul><h3 id="引用references与借用"><a class="markdownIt-Anchor" href="#引用references与借用"></a> 引用(References)与借用</h3><p><code>&</code>语法让我们创建一个指向的引用,但并不拥有。</p><figure class="highlight rust"><table><tr><td class="code"><pre><span class="line"><span class="keyword">fn</span> <span class="title function_">main</span>() {</span><br><span class="line"> <span class="keyword">let</span> <span class="variable">s1</span> = <span class="type">String</span>::<span class="title function_ invoke__">from</span>(<span class="string">"hello"</span>);</span><br><span class="line"></span><br><span class="line"> <span class="keyword">let</span> <span class="variable">len</span> = <span class="title function_ invoke__">calculate_length</span>(&s1);</span><br><span class="line"></span><br><span class="line"> <span class="built_in">println!</span>(<span class="string">"The length of '{}' is {}."</span>, s1, len);</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="keyword">fn</span> <span class="title function_">calculate_length</span>(s: &<span class="type">String</span>) <span class="punctuation">-></span> <span class="type">usize</span> {</span><br><span class="line"> s.<span class="title function_ invoke__">len</span>()</span><br><span class="line">}</span><br></pre></td></tr></table></figure><p><code>& mut</code> 可变引用,可修改应用的值;</p><p>限制:</p><ul class="lvl-0"><li class="lvl-2"><p>在任意给定时间,<strong>要么</strong> 只能有一个可变引用,<strong>要么</strong> 只能有多个不可变引用。</p></li><li class="lvl-2"><p>引用必须总是有效的。</p></li></ul><p><strong>数据竞争</strong>(<em>data race</em>)类似于竞态条件,它可由这三个行为造成:</p><ul class="lvl-0"><li class="lvl-2"><p>两个或更多指针同时访问同一数据。</p></li><li class="lvl-2"><p>至少有一个指针被用来写入数据。</p></li><li class="lvl-2"><p>没有同步数据访问的机制。</p></li></ul><figure class="highlight rust"><table><tr><td class="code"><pre><span class="line"><span class="keyword">fn</span> <span class="title function_">main</span>() {</span><br><span class="line"> <span class="keyword">let</span> <span class="keyword">mut </span><span class="variable">s1</span> = <span class="type">String</span>::<span class="title function_ invoke__">from</span>(<span class="string">"hello"</span>);</span><br><span class="line"> <span class="title function_ invoke__">change</span>(&<span class="keyword">mut</span> s1);</span><br><span class="line"></span><br><span class="line"> <span class="built_in">println!</span>(<span class="string">"The length of '{}' is {}."</span>, s1, s1.<span class="title function_ invoke__">len</span>());</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="keyword">fn</span> <span class="title function_">change</span>(s: &<span class="keyword">mut</span> <span class="type">String</span>){</span><br><span class="line"> s.<span class="title function_ invoke__">push_str</span>(<span class="string">", world!!!!"</span>);</span><br><span class="line">}</span><br><span class="line"></span><br></pre></td></tr></table></figure><h3 id="slice类型"><a class="markdownIt-Anchor" href="#slice类型"></a> Slice类型</h3><blockquote><p><em>slice</em> 允许你引用集合中一段连续的元素序列,而不用引用整个集合。slice 是一种引用,所以它没有所有权。</p></blockquote>]]></content>
<summary type="html"><link rel="stylesheet" class="aplayer-secondary-style-marker" href="/assets/css/APlayer.min.css"><script src="/assets/js/APlayer.min.js" cla</summary>
<category term="学习" scheme="https://rm-rf.ink/categories/%E5%AD%A6%E4%B9%A0/"/>
<category term="cargo" scheme="https://rm-rf.ink/tags/cargo/"/>
<category term="rustc" scheme="https://rm-rf.ink/tags/rustc/"/>
<category term="rustup" scheme="https://rm-rf.ink/tags/rustup/"/>
</entry>
<entry>
<title>Transformer模型</title>
<link href="https://rm-rf.ink/*/e4b8a22b.html"/>
<id>https://rm-rf.ink/*/e4b8a22b.html</id>
<published>2024-02-22T03:01:14.000Z</published>
<updated>2024-02-22T03:30:25.314Z</updated>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="/assets/css/APlayer.min.css"><script src="/assets/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="/assets/js/Meting.min.js"></script><p> Transformer模型最早是由Google的研究团队在2017年提出的,并在论文《Attention is All You Need》<sup class="footnote-ref"><a href="#fn1" id="fnref1">[1]</a></sup> 中进行了详细的介绍。这个模型是为了解决自然语言处理(NLP)任务中的一些问题而设计的,特别是为了克服传统循环神经网络(RNN)和长短期记忆网络(LSTM)在处理长序列时的局限性,如梯度消失或梯度爆炸问题。</p><p> Transformer模型的核心思想是使用自注意力机制(Self-Attention Mechanism)来捕捉输入序列中的依赖关系。这种机制允许模型在处理每个输入元素时,都能够关注到输入序列中的所有其他元素,从而能够捕捉到更长的依赖关系。此外,Transformer模型还采用了位置编码(Positional Encoding)来弥补模型本身不具备处理序列顺序的能力。</p><p> Transformer模型由两部分组成:编码器(Encoder)和解码器(Decoder)。编码器负责将输入序列转换为一系列向量表示,而解码器则负责根据这些向量表示生成输出序列。这两部分都由多个相同的层堆叠而成,每一层都包含一个多头自注意力子层和一个简单的全连接前馈神经网络。</p><p> 由于Transformer模型不依赖RNN的顺序结构,因此它可以实现高效的并行化训练,这使得它在处理大规模数据集时具有显著的优势。此外,Transformer模型的强大表示能力和灵活性使得它在多个NLP任务上都取得了显著的效果,成为了自然语言处理领域的一种主流模型。</p><p> 总的来说,Transformer模型是Google研究团队在2017年提出的一种基于自注意力机制的深度学习模型,它的出现为自然语言处理领域的发展带来了革命性的突破。</p><p>引用:</p><ul class="lvl-0"><li class="lvl-2"><p><a href="https://zhuanlan.zhihu.com/p/647249972">Text-to-SQL小白入门(一)</a></p></li><li class="lvl-2"><p><a href="https://zhuanlan.zhihu.com/p/650407036">Text-to-SQL小白入门(二)</a></p></li></ul><p>原论文:</p><div class="row"> <embed src="/images/1706.03762.pdf" width="100%" height="550" type="application/pdf"></div><hr class="footnotes-sep"><section class="footnotes"><ol class="footnotes-list"><li id="fn1" class="footnote-item"><p>《Attention is All You Need》 <a href="#fnref1" class="footnote-backref">↩︎</a></p></li></ol></section>]]></content>
<summary type="html"><link rel="stylesheet" class="aplayer-secondary-style-marker" href="/assets/css/APlayer.min.css"><script src="/assets/js/APlayer.min.js" cla</summary>
<category term="学习" scheme="https://rm-rf.ink/categories/%E5%AD%A6%E4%B9%A0/"/>
<category term="NLP" scheme="https://rm-rf.ink/tags/NLP/"/>
<category term="text2sql" scheme="https://rm-rf.ink/tags/text2sql/"/>
<category term="机器学习" scheme="https://rm-rf.ink/tags/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0/"/>
</entry>
<entry>
<title>笔记4-《程序员数学-1》</title>
<link href="https://rm-rf.ink/*/c88b93d0.html"/>
<id>https://rm-rf.ink/*/c88b93d0.html</id>
<published>2024-02-19T01:07:47.000Z</published>
<updated>2024-02-22T07:52:55.056Z</updated>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="/assets/css/APlayer.min.css"><script src="/assets/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="/assets/js/Meting.min.js"></script>]]></content>
<summary type="html"><link rel="stylesheet" class="aplayer-secondary-style-marker" href="/assets/css/APlayer.min.css"><script src="/assets/js/APlayer.min.js" cla</summary>
<category term="学习" scheme="https://rm-rf.ink/categories/%E5%AD%A6%E4%B9%A0/"/>
</entry>
<entry>
<title>开年大吉,工作顺利!</title>
<link href="https://rm-rf.ink/*/73b21f0a.html"/>
<id>https://rm-rf.ink/*/73b21f0a.html</id>
<published>2024-02-18T07:00:20.000Z</published>
<updated>2024-02-18T07:15:06.086Z</updated>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="/assets/css/APlayer.min.css"><script src="/assets/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="/assets/js/Meting.min.js"></script><div style="display:flex;justify-content: center;"> <div> <img width="400" height="auto" src="../images/image-20240218151047849.png" alt="龙年大吉大利" style="text-align: center;"> <div style="text-align: center;user-select: none;">图片:“龙年大吉大利”</div> </div> </div>]]></content>
<summary type="html"><link rel="stylesheet" class="aplayer-secondary-style-marker" href="/assets/css/APlayer.min.css"><script src="/assets/js/APlayer.min.js" cla</summary>
<category term="工作" scheme="https://rm-rf.ink/categories/%E5%B7%A5%E4%BD%9C/"/>
</entry>
<entry>
<title>研发年终总结</title>
<link href="https://rm-rf.ink/*/72bee84d.html"/>
<id>https://rm-rf.ink/*/72bee84d.html</id>
<published>2024-02-05T02:52:56.000Z</published>
<updated>2024-02-18T07:06:12.600Z</updated>
<content type="html"><![CDATA[<div class="hbe hbe-container" id="hexo-blog-encrypt" data-wpm="糟糕!密码错误了." data-whm="抱歉, 这个文章不能被校验, 不过您还是能看看解密后的内容."> <script id="hbeData" type="hbeData" data-hmacdigest="d750b976d0af0dae30016627668be28e6d2795db96258477d297a1da59746216">89730641517f40fad9fb11d8e72e80bf06c939f51e30e9318348e356012ae93802623e7e7460999b3f7e8ba755c0d29599ae788f4544e2d8c77419f7d87eed449b7d6813e006fe13f540d0d66182fef8c50ebd9d211e40be206647f7e00fd685b86946fa705ad4651c18ab2a320b4a69699ab0980126725a179cb3c64faa8f2509c4dddd4adebe64d5cd4207643b74cb951ade33149cd6cd51d669bce78e7df026fe1abb945332d7c0a9e2f0c8bc51b46617f418a10ed53af1ad8a5de091ee7b9161a36c5a28454693301b254151eaad572fe3718480827cbcb2b29cbbe2dd52029dfad21eac08db5c648820175597abb4a0c5ff69693595d1d3fe51de4c4f9c4194b77a63e7b407560fa73f56328d3cbee56843f26b4272acb3eeeaa0e46d0184c4df4adb62aec6770ccb2861933b80934badbd52b2032fb7d7fa8ea0a30401ead330577c4c8a85a72eb63f81f2d244582b0bf85438efa61c49e9528be85df7860fd17b3214829fa137b0184419f3fed24cb821d072633aec08c83b1784e73254f5ed31d204d1b341591704aec00a4d084e8d5095986f4aacc7046f1624418b2ec37bd0d60f984141aac07614e7fb2771146fa6ae68844ab7397c9522ac715b</script> <div class="hbe hbe-content"> <div class="hbe hbe-input hbe-input-wave"> <input class="hbe hbe-input-field hbe-input-field-wave" type="password" id="hbePass"> <label class="hbe hbe-input-label hbe-input-label-wave" for="hbePass"> <span class="hbe hbe-input-label-content hbe-input-label-content-wave">输入密码查看内容</span> </label> <svg class="hbe hbe-graphic hbe-graphic-wave" width="300%" height="100%" viewBox="0 0 1200 60" preserveAspectRatio="none"> <path d="M0,56.5c0,0,298.666,0,399.333,0C448.336,56.5,513.994,46,597,46c77.327,0,135,10.5,200.999,10.5c95.996,0,402.001,0,402.001,0"></path> </svg> </div> </div></div><script data-pjax src="/lib/hbe.js"></script><link href="/css/hbe.style.css" rel="stylesheet" type="text/css">]]></content>
<summary type="html">文章加密了,需要输入密码查看</summary>
<category term="工作" scheme="https://rm-rf.ink/categories/%E5%B7%A5%E4%BD%9C/"/>
</entry>
<entry>
<title>表单中心功能清单</title>
<link href="https://rm-rf.ink/*/74a10861.html"/>
<id>https://rm-rf.ink/*/74a10861.html</id>
<published>2024-01-30T00:58:31.000Z</published>
<updated>2024-02-05T07:50:45.258Z</updated>
<content type="html"><![CDATA[<div class="hbe hbe-container" id="hexo-blog-encrypt" data-wpm="糟糕!密码错误了." data-whm="抱歉, 这个文章不能被校验, 不过您还是能看看解密后的内容."> <script id="hbeData" type="hbeData" data-hmacdigest="d4fdaf5f778ad2b7f7839b20408f063600471c71adaf758c95e523234574a9d6">89730641517f40fad9fb11d8e72e80bf06c939f51e30e9318348e356012ae93802623e7e7460999b3f7e8ba755c0d29599ae788f4544e2d8c77419f7d87eed449b7d6813e006fe13f540d0d66182fef8c50ebd9d211e40be206647f7e00fd685b86946fa705ad4651c18ab2a320b4a69699ab0980126725a179cb3c64faa8f2509c4dddd4adebe64d5cd4207643b74cb951ade33149cd6cd51d669bce78e7df026fe1abb945332d7c0a9e2f0c8bc51b46617f418a10ed53af1ad8a5de091ee7b9161a36c5a28454693301b254151eaad572fe3718480827cbcb2b29cbbe2dd52029dfad21eac08db5c648820175597abb4a0c5ff69693595d1d3fe51de4c4f9c4194b77a63e7b407560fa73f56328d3cbee56843f26b4272acb3eeeaa0e46d0184c4df4adb62aec6770ccb2861933b80362d81b2e5010a91d2c8f139b9eb004455057809151ad7f7ca7b6b37b48037dfaf87a9f1e3fd2e3e9fbcddefded0a9ffe4050860aaf8120a12909a51025f739ff300c37edce140a5b599c11a069c8d6716e7a198692712ae072cb0833533e07f38919c92312fb2f264239dc7ee606385a6f34772835d1e53de7cab5f35053a3c24486db2f6f061efb91dd54dbb6f7b7acb00bb2002d390eee61b94c5e4bcc9b0317177adb53e6fc797830898cc53c48bbcce3f80100cbcd489454ce64ecdd98984531a7dc6f0ef02d73406eda7728fd6</script> <div class="hbe hbe-content"> <div class="hbe hbe-input hbe-input-wave"> <input class="hbe hbe-input-field hbe-input-field-wave" type="password" id="hbePass"> <label class="hbe hbe-input-label hbe-input-label-wave" for="hbePass"> <span class="hbe hbe-input-label-content hbe-input-label-content-wave">输入密码查看内容</span> </label> <svg class="hbe hbe-graphic hbe-graphic-wave" width="300%" height="100%" viewBox="0 0 1200 60" preserveAspectRatio="none"> <path d="M0,56.5c0,0,298.666,0,399.333,0C448.336,56.5,513.994,46,597,46c77.327,0,135,10.5,200.999,10.5c95.996,0,402.001,0,402.001,0"></path> </svg> </div> </div></div><script data-pjax src="/lib/hbe.js"></script><link href="/css/hbe.style.css" rel="stylesheet" type="text/css">]]></content>
<summary type="html">文章加密了,需要输入密码查看</summary>
<category term="工作" scheme="https://rm-rf.ink/categories/%E5%B7%A5%E4%BD%9C/"/>
<category term="vue" scheme="https://rm-rf.ink/tags/vue/"/>
<category term="表单" scheme="https://rm-rf.ink/tags/%E8%A1%A8%E5%8D%95/"/>
<category term="formily" scheme="https://rm-rf.ink/tags/formily/"/>
</entry>
<entry>
<title>成本核算</title>
<link href="https://rm-rf.ink/*/fb428c48.html"/>
<id>https://rm-rf.ink/*/fb428c48.html</id>
<published>2024-01-25T07:09:54.000Z</published>
<updated>2024-01-25T09:51:10.596Z</updated>
<content type="html"><![CDATA[<div class="hbe hbe-container" id="hexo-blog-encrypt" data-wpm="糟糕!密码错误了." data-whm="抱歉, 这个文章不能被校验, 不过您还是能看看解密后的内容."> <script id="hbeData" type="hbeData" data-hmacdigest="44fc6b09e12b1dca25586a84cbdcad59fe5874ff258d27b23671866eb31f64cc">89730641517f40fad9fb11d8e72e80bf06c939f51e30e9318348e356012ae93802623e7e7460999b3f7e8ba755c0d29599ae788f4544e2d8c77419f7d87eed449b7d6813e006fe13f540d0d66182fef8c50ebd9d211e40be206647f7e00fd685b86946fa705ad4651c18ab2a320b4a69699ab0980126725a179cb3c64faa8f2509c4dddd4adebe64d5cd4207643b74cb951ade33149cd6cd51d669bce78e7df026fe1abb945332d7c0a9e2f0c8bc51b46617f418a10ed53af1ad8a5de091ee7b9161a36c5a28454693301b254151eaad572fe3718480827cbcb2b29cbbe2dd52029dfad21eac08db5c648820175597abb4a0c5ff69693595d1d3fe51de4c4f9c4194b77a63e7b407560fa73f56328d3cbee56843f26b4272acb3eeeaa0e46d0195048f25efe9b21ce963d68bba31f68109d09d5e9a4798ba30c885f456814a1f79a3813597deaa347db33459cd74ba7a0df0f4961b35961cf13b305d52d09764798e16bc3970b56199d955ddc1cc9c04c353fb965ceadfc5376a7704a76f05c3da2895c2e503e0f9acd812b0bc56d7b3677b1a7366b54e384df56d66b32e47484884bf3ad6f10f3899fa6a1d0ebc8f4a8f15a25926c5f09faafa892771e672dce8e9193fa9821d44cf076aab160fdd0005724034d18e4ec566a57f74d507df6d98454bbb420fcada5e86fac9dbfa97eeb919651443dcdc350dc638e6283d9e889b5ef81fbdf4f010db814ea35ae2d88b145fddbb9a4ec5fb960e01b8dccc33d9d1472271d360d47d559c2cd5ae29072cf1682091e200aaa447262efc45994d84b2c885e9b76e9f6b3ef00b89976974fb39dc4bdf102c62aba6f4d39dd48aa679f191b17b8ff5f2e0abcd9bd1f2337ad24b07c79ad4db23273f4d9b18e4413df745c0f31919fcc98d3b2a2ff051813176fcb8d58ee7f78dc47725baf6037a8c9c9023cd0664a14ad3df32b1860769e27cfc62a526a7429fc8a9bfa8f0c4eaf21b91b43f495b19552fc3cd3ba2059a4b27288ebba98589861a37f28b9e654f66021082d4c872a88d3facc4a920fd93fbe53794151d3810e0f41ae6ef736202eddf98d357b518c8ee5d24291815099bce81bbd1e3d5be21a6190e11110ebcebc495f364fb7ddd71af01062f3f4331541424ae155572f54b5b1a9e2a4451b7e5a67dc4ae23b02e2bcf8c5405caf52af747361a7e201552703e9e68652e283e243ae778b4fb061e2fe1c5a88b32885fa001c124fa4dbdf27e6dc8717891c8924f961a8d014b440cf0fee0804db043bdcf8004e56c8c9676c2bc925216219597ea804477986a7300a40bcc2a29f11ddfc2a7009402895b472b4d9abf359728dfa7fb1c32e3c396848fb0756c2c6d199f32eb1a953f75159e59b96a5d03d0b25032df570ad289c5da97f1e91fcc79f3132a357fbea1c0585c60b8ced01aa77f53cae07e61e0b01aa3b298aedf9c289ec3f1a8894d5947b2dd4a9790bc417c2fc4fcd46bb38325ad6aca04cf8d969c071d6758837d5e3da1e0708a6fa00fb64ce344ccc5631f40bd3713b7836a6855fd204c3448f21c8523ab9eeb094c7d504fa6dff88478d3e276817712a96f91c3269f5aa04cdf1bb4751a51a64f67bd2782535970e6bd38533bd3e89f41bf230062696042f6be90a95431374bac8d16bde9a58befbd3e2c60144bce8a3cc7fee5217def52301b310c0cfefbc8a1af62f6870a955daecf988ae609d847725cc6d0feccaa6e3142d82eef1ee24fdac8d752f719cf9c2023212e6df6c84f637f43757b7987545e8931c3da36550ec78b3f84e699703d6a72bf242b0da37f109dfe4ce60a5ad452dd3af59a631ecaca57f6ba537627d472300fad6925ff147fc94dc0be104fbfd6a49876ccbb3337af154ecc4e1788fea413e4dccb4049d2dc6010d28135ddca3d954c3668b8cf8dbf563fcdb86efda4822909ab8f17419a4ef3060cdcace08ef372da7a9d2314b1df1b56c8941debc6751d36ac4d8e7f6bc38a5ea7efd036094f137ef5041f35e1df174e62a4e9b85168c98c373cd32ecb6a085e39d243cfd3db5adf7bc0cca77d676cd9ea6cf8b1107a809dacfd8f51cd0b650a165c608439c0f1400e991fb804334832ef4b0220273cc27212101228cb0da9474d977766514151b13a02dfcec92437399a2b7e4d0864d8030d776bcb4b81034fb5eb2c04bbc0fa62ea6b79f119f779efdcdc8442c70894338dc66320290eb56ff022ed0c34906f20705ce50d2b79450d001c79757e3c833de3db9226d052a38b781b149feb66773de072bc2fd8c3782f6ceda0ece7cb0681b977ee13faaf85d92444b052f0bc1295a6415aa25580cc540b96c3117c6270e8f7c43e65564284c38a607c616f7994e40283079c04b11aac4ffec23bc26753cb32ec18bdffa12709caafec6291fe7964cb6600f9034705b0cc8170f11c3c7e4e4d0e2eb0b2a04dd514da1b3779951bd6dc5588e768caccc5a81c91cab48d28a89468d3ddad9325afdb5bba58e8670f7244606e0d4a79bfdcc6ff94d06ba7af6cde978c9bd64a5e3e30534794bc63c5c42c055936e84b687dd1a6d82f2e58eb760f9c422ee12be872c6a01b043cb2bda28791eb038b87a01c17015db6a112442934e9b93e8ddd90738b8fe725487e88fb58bffe09dd659cd1a3e11939fa78e18d08fea534f0b2f997530236867e8b78e91aeb30452f29361da203b20e06b247bfc22243c7f8f42b93722578b2f8f10dc9c638e2799024feb319a2010a212d3c891ef1a555820e3d0be66d224112c010488de485babf31216505e4199078aabe5c50273c3aa07fd19c65351009103594858553d400fea8e7f291b49b1714effbfc41940f6a0c72e9b06f0b4ddb8be951974c86bcae83f74a7c59bd924dd00c5494fc5c7cc6a0636d96e32bd220be55371e3a500300d1653a24e7fa9ce55bed09b3464a1e8007b4023a645d69c07784ed307b37e40cd34b34c406d9e2f7ac9054241c4f56af824156bf38b4fe19d6730dab1615532654db2642079c989876c5b4ee7ad737cde310b4f3b286b5485e542a5e51e1d27e4dde347482dd81c2e31cee68101262974f9853e250c1e7d0e997f267af4d20f757ea784bec6f205250934bad7fa43a691a2b128eaa0accc2c7f4dbf9a6e3119670587607ef555a3ffd3ecb5132a2dceb93f7d30d72cb69423ba21d3b665213c9152eabaf9fe0959749d942c6d2312254a197c21fe32a2bfe23889dcfd251b5e91ae2e2a57c3f79a33d8efc35015bad567838f453f1c1e43dd73bf51480d60923cbb7a54dc1b939fea28d05f8de237866ce74ed2c0a19a4643fca17010805b698a21858a1f872d1002ef9a30c73dae2ecf691469cd92931b9fe98</script> <div class="hbe hbe-content"> <div class="hbe hbe-input hbe-input-wave"> <input class="hbe hbe-input-field hbe-input-field-wave" type="password" id="hbePass"> <label class="hbe hbe-input-label hbe-input-label-wave" for="hbePass"> <span class="hbe hbe-input-label-content hbe-input-label-content-wave">输入密码查看内容</span> </label> <svg class="hbe hbe-graphic hbe-graphic-wave" width="300%" height="100%" viewBox="0 0 1200 60" preserveAspectRatio="none"> <path d="M0,56.5c0,0,298.666,0,399.333,0C448.336,56.5,513.994,46,597,46c77.327,0,135,10.5,200.999,10.5c95.996,0,402.001,0,402.001,0"></path> </svg> </div> </div></div><script data-pjax src="/lib/hbe.js"></script><link href="/css/hbe.style.css" rel="stylesheet" type="text/css">]]></content>
<summary type="html">文章加密了,需要输入密码查看</summary>
<category term="工作" scheme="https://rm-rf.ink/categories/%E5%B7%A5%E4%BD%9C/"/>
</entry>
<entry>
<title>奇怪的梦</title>
<link href="https://rm-rf.ink/*/2afb063d.html"/>
<id>https://rm-rf.ink/*/2afb063d.html</id>
<published>2024-01-25T02:09:11.000Z</published>
<updated>2024-02-05T07:53:52.538Z</updated>
<content type="html"><![CDATA[<div class="hbe hbe-container" id="hexo-blog-encrypt" data-wpm="糟糕!密码错误了." data-whm="抱歉, 这个文章不能被校验, 不过您还是能看看解密后的内容."> <script id="hbeData" type="hbeData" data-hmacdigest="0a751ab2cab789f89ab563c1df7773ac753b4ac0f92147c2c3b943ed66d2bbde">89730641517f40fad9fb11d8e72e80bf06c939f51e30e9318348e356012ae93802623e7e7460999b3f7e8ba755c0d29599ae788f4544e2d8c77419f7d87eed449b7d6813e006fe13f540d0d66182fef8c50ebd9d211e40be206647f7e00fd685b86946fa705ad4651c18ab2a320b4a69699ab0980126725a179cb3c64faa8f2509c4dddd4adebe64d5cd4207643b74cb951ade33149cd6cd51d669bce78e7df026fe1abb945332d7c0a9e2f0c8bc51b46617f418a10ed53af1ad8a5de091ee7b9161a36c5a28454693301b254151eaad572fe3718480827cbcb2b29cbbe2dd52029dfad21eac08db5c648820175597abb4a0c5ff69693595d1d3fe51de4c4f9c4194b77a63e7b407560fa73f56328d3cbee56843f26b4272acb3eeeaa0e46d01101c2c8c781e0b1cd8c2268fc4efcf73eca9ec52ed737c3e4b1fc88ab5677a7f6b2a62a2e14f94a5baf9c3196a1aa8cb0da095c4d0a4032935d7df8bfad0a2f3b9b456191eff772b024a0d4a32d85d8f8524dec24a9148950127e2adbd9a26578ed16c252bf25c35426dd6517a40c5926e1c6cb8e8294e15ca5801107d94b580ec386c3f00be8540f1b49668ebacc077b6f3336c569dec0e085e833399f37688fd7b3c47f3e1e8de882e4b6d5cd64ac86338f967fc35d1d4eea06035b826eabe2263698ba13b225d97d2c771bb4de617fbafd3c0ffdae4e1e5d3ac1b8ff8491459ea01b954978e52bb44a32630d794663cfc88878f79a6bacc313b01a3e51978bf4e192b35648c90677ab09dfb00fc6d631338b2548542f4858da83e9228d11046a4a1c7726c45eb62eae142e6cb91a36b39470de9bdf2b4e3cd34c2bb3877418d5917305a89b60398ec3dc1e825a69c38ea2a836766665c449052b4c1a682e0f73f068cfbfc28df6cc44b83779e372403309ebbf7ed049e5737817025d9a295ffa9c27673cf2ecc30a20288465b51963d3d0a46d1142ae2a039664f06c2d95e9624899b2987d27754d20a494f7d36c0</script> <div class="hbe hbe-content"> <div class="hbe hbe-input hbe-input-wave"> <input class="hbe hbe-input-field hbe-input-field-wave" type="password" id="hbePass"> <label class="hbe hbe-input-label hbe-input-label-wave" for="hbePass"> <span class="hbe hbe-input-label-content hbe-input-label-content-wave">输入密码查看内容</span> </label> <svg class="hbe hbe-graphic hbe-graphic-wave" width="300%" height="100%" viewBox="0 0 1200 60" preserveAspectRatio="none"> <path d="M0,56.5c0,0,298.666,0,399.333,0C448.336,56.5,513.994,46,597,46c77.327,0,135,10.5,200.999,10.5c95.996,0,402.001,0,402.001,0"></path> </svg> </div> </div></div><script data-pjax src="/lib/hbe.js"></script><link href="/css/hbe.style.css" rel="stylesheet" type="text/css">]]></content>
<summary type="html">文章加密了,需要输入密码查看</summary>
<category term="生活" scheme="https://rm-rf.ink/categories/%E7%94%9F%E6%B4%BB/"/>
<category term="奇怪" scheme="https://rm-rf.ink/tags/%E5%A5%87%E6%80%AA/"/>
<category term="梦" scheme="https://rm-rf.ink/tags/%E6%A2%A6/"/>
</entry>
<entry>
<title>revealjs-animated动画文档</title>
<link href="https://rm-rf.ink/*/8212ba91.html"/>
<id>https://rm-rf.ink/*/8212ba91.html</id>
<published>2024-01-24T10:00:16.000Z</published>
<updated>2024-01-25T01:53:21.591Z</updated>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="/assets/css/APlayer.min.css"><script src="/assets/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="/assets/js/Meting.min.js"></script><p><a href="https://rogeralmeida.github.io/revealjs-animated-examples/">查看示例</a></p><h2 id="如何安装"><a class="markdownIt-Anchor" href="#如何安装"></a> 如何安装</h2><ol><li class="lvl-3"><p>安装revealjs-animated插件</p></li></ol><figure class="highlight bash"><table><tr><td class="code"><pre><span class="line">npm install revealjs-animated</span><br></pre></td></tr></table></figure><ol start="2"><li class="lvl-3"><p>在Reveal.js中初始化安装路径</p></li></ol><figure class="highlight javascript"><table><tr><td class="code"><pre><span class="line"><span class="comment">//index.html</span></span><br><span class="line"><span class="title class_">Reveal</span>.<span class="title function_">initialize</span>({</span><br><span class="line"> <span class="attr">dependencies</span>: [</span><br><span class="line"> <span class="comment">// Other plugins</span></span><br><span class="line"> {<span class="attr">src</span>: <span class="string">'node_modules/revealjs-animated/dist/revealjs-animated.js'</span>, <span class="attr">async</span>: <span class="literal">true</span>}</span><br><span class="line"> ]</span><br><span class="line">});</span><br></pre></td></tr></table></figure><h2 id="如何使用"><a class="markdownIt-Anchor" href="#如何使用"></a> 如何使用?</h2><h3 id="居中移动动画"><a class="markdownIt-Anchor" href="#居中移动动画"></a> 居中移动动画</h3><figure class="highlight html"><table><tr><td class="code"><pre><span class="line"><span class="comment"><!--html--></span></span><br><span class="line"><span class="tag"><<span class="name">h1</span> <span class="attr">id</span>=<span class="string">"titulo"</span> <span class="attr">class</span>=<span class="string">"fragment animated move-to-middle-top"</span>></span>居中<span class="tag"></<span class="name">h1</span>></span></span><br><span class="line"></span><br><span class="line"><span class="comment"><!--md--></span></span><br><span class="line"># 居中<span class="comment"><!-- .element: class="fragment animated move-to-middle-top" --></span></span><br><span class="line"></span><br></pre></td></tr></table></figure><h4 id="属性"><a class="markdownIt-Anchor" href="#属性"></a> 属性</h4><p>此动画不允许使用任何属性。</p><h3 id="自定义位置移动动画"><a class="markdownIt-Anchor" href="#自定义位置移动动画"></a> 自定义位置移动动画</h3><figure class="highlight html"><table><tr><td class="code"><pre><span class="line"><span class="comment"><!--html--></span> </span><br><span class="line"><span class="tag"><<span class="name">p</span> <span class="attr">class</span>=<span class="string">"fragment animated move-to"</span>></span>默认参数<span class="tag"></<span class="name">p</span>></span></span><br><span class="line"></span><br><span class="line"><span class="comment"><!--md--></span></span><br><span class="line">默认参数<span class="comment"><!-- .element: class="fragment animated move-to" --></span></span><br><span class="line"></span><br></pre></td></tr></table></figure><h4 id="属性-2"><a class="markdownIt-Anchor" href="#属性-2"></a> 属性</h4><table><thead><tr><th>名称</th><th>默认值</th><th>描述</th></tr></thead><tbody><tr><td>data-animated-move-to-left</td><td>50px</td><td>动画对象应在X轴上移动的距离</td></tr><tr><td>data-animated-move-to-top</td><td>25px</td><td>动画对象应在Y轴上移动的距离</td></tr></tbody></table><h3 id="放大动画"><a class="markdownIt-Anchor" href="#放大动画"></a> 放大动画</h3><figure class="highlight html"><table><tr><td class="code"><pre><span class="line"><span class="comment"><!--html--></span> </span><br><span class="line"><span class="tag"><<span class="name">p</span> <span class="attr">class</span>=<span class="string">"fragment animated scale-up"</span>></span>放大<span class="tag"></<span class="name">p</span>></span></span><br><span class="line"><span class="comment"><!--md--></span></span><br><span class="line">放大<span class="comment"><!-- .element: class="fragment animated scale-up" --></span></span><br><span class="line"></span><br></pre></td></tr></table></figure><h4 id="属性-3"><a class="markdownIt-Anchor" href="#属性-3"></a> 属性</h4><table><thead><tr><th>名称</th><th>默认值</th><th>描述</th></tr></thead><tbody><tr><td>data-animated-scale-up-from</td><td>1</td><td>起始值</td></tr><tr><td>data-animated-scale-up-to</td><td>2</td><td>最大值</td></tr></tbody></table><h3 id="缩小动画"><a class="markdownIt-Anchor" href="#缩小动画"></a> 缩小动画</h3><figure class="highlight html"><table><tr><td class="code"><pre><span class="line"><span class="comment"><!--html--></span> </span><br><span class="line"><span class="tag"><<span class="name">p</span> <span class="attr">class</span>=<span class="string">"fragment animated scale-down"</span>></span>缩小<span class="tag"></<span class="name">p</span>></span></span><br><span class="line"><span class="comment"><!--md--></span></span><br><span class="line">缩小<span class="comment"><!-- .element: class="fragment animated scale-down" --></span></span><br><span class="line"></span><br></pre></td></tr></table></figure><h4 id="属性-4"><a class="markdownIt-Anchor" href="#属性-4"></a> 属性</h4><table><thead><tr><th>名称</th><th>默认值</th><th>描述</th></tr></thead><tbody><tr><td>data-animated-scale-down-from</td><td>1</td><td>起始值</td></tr><tr><td>data-animated-scale-down-to</td><td>0.5</td><td>最小值</td></tr></tbody></table><h3 id="旋转动画"><a class="markdownIt-Anchor" href="#旋转动画"></a> 旋转动画</h3><figure class="highlight html"><table><tr><td class="code"><pre><span class="line"><span class="comment"><!--html--></span> </span><br><span class="line"><span class="tag"><<span class="name">p</span> <span class="attr">class</span>=<span class="string">"fragment animated rotate"</span>></span>旋转<span class="tag"></<span class="name">p</span>></span></span><br><span class="line"><span class="comment"><!--md--></span></span><br><span class="line">旋转<span class="comment"><!-- .element: class="fragment animated rotate" --></span></span><br><span class="line"></span><br></pre></td></tr></table></figure><h4 id="属性-5"><a class="markdownIt-Anchor" href="#属性-5"></a> 属性</h4><table><thead><tr><th>名称</th><th>默认值</th><th>描述</th></tr></thead><tbody><tr><td>data-animated-rotate-from</td><td><code>0deg</code></td><td>起始角度</td></tr><tr><td>data-animated-rotate-to</td><td><code>180deg</code></td><td>最大角度</td></tr></tbody></table><h2 id="时间属性"><a class="markdownIt-Anchor" href="#时间属性"></a> 时间属性</h2><p><code>duration</code>, <code>iteration</code> 和 <code>fill</code> 动画属性可以通过以下属性进行控制:</p><h4 id="属性-6"><a class="markdownIt-Anchor" href="#属性-6"></a> 属性</h4><table><thead><tr><th>名称</th><th>必填</th><th>默认值</th><th>描述</th></tr></thead><tbody><tr><td>data-animated-duration</td><td>否</td><td>1000</td><td>动画持续时间(毫秒)</td></tr><tr><td>data-animated-iterations</td><td>否</td><td>1</td><td>动画循环次数</td></tr><tr><td>data-animated-fill</td><td>否</td><td>forwards</td><td>动画最终状态 <code>forwards</code>, <code>none</code>, <code>backwards</code>, <code>both</code>, <code>auto</code>. 更多属性设置 <a href="https://developer.mozilla.org/en-US/docs/Web/API/EffectTiming/fill">MDN: EffectTiming.fill</a></td></tr></tbody></table><h1 id="组合动画"><a class="markdownIt-Anchor" href="#组合动画"></a> 组合动画</h1><p>从1.2.0版本开始,可以将多个动画组合在一起以创建动画。只需要添加多个CSS类。</p><figure class="highlight html"><table><tr><td class="code"><pre><span class="line"><span class="comment"><!--html--></span></span><br><span class="line"><span class="tag"><<span class="name">p</span> <span class="attr">class</span>=<span class="string">"fragment animated move-to-middle-top rotate"</span>></span>移动并旋转<span class="tag"></<span class="name">p</span>></span></span><br><span class="line"><span class="comment"><!--md--></span></span><br><span class="line">移动并旋转<span class="comment"><!-- .element: class="fragment animated move-to-middle-top rotate" --></span></span><br></pre></td></tr></table></figure><p><a href="#general-time-attributes">时间属性</a> 只能用于组合动画,不能单独用于每个动画;</p>]]></content>
<summary type="html"><link rel="stylesheet" class="aplayer-secondary-style-marker" href="/assets/css/APlayer.min.css"><script src="/assets/js/APlayer.min.js" cla</summary>
<category term="学习" scheme="https://rm-rf.ink/categories/%E5%AD%A6%E4%B9%A0/"/>
<category term="reveal.js" scheme="https://rm-rf.ink/tags/reveal-js/"/>
<category term="animate" scheme="https://rm-rf.ink/tags/animate/"/>
<category term="css动画" scheme="https://rm-rf.ink/tags/css%E5%8A%A8%E7%94%BB/"/>
<category term="css" scheme="https://rm-rf.ink/tags/css/"/>
</entry>
<entry>
<title>Reveal.js使用</title>
<link href="https://rm-rf.ink/*/6befbd07.html"/>
<id>https://rm-rf.ink/*/6befbd07.html</id>
<published>2024-01-22T09:55:12.000Z</published>
<updated>2024-01-25T06:52:21.927Z</updated>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="/assets/css/APlayer.min.css"><script src="/assets/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="/assets/js/Meting.min.js"></script><div class="hexo-reveal-embed"><iframe src="/slide/Reveal.js%E5%B9%BB%E7%81%AF%E7%89%87/" allowfullscreen loading="lazy"></iframe></div><br><br><details open><summary><span class="pre-summary"> </span><mark><strong>代码:</strong></mark></summary><figure class="highlight html"><table><tr><td class="code"><pre><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="comment"><!-- .slide: id="slide1" data-background-image="./1.jpeg" data-background-opacity="0.5" --></span></span><br><span class="line"></span><br><span class="line"># Index 1</span><br><span class="line"></span><br><span class="line">### 我是第一个页面</span><br><span class="line"><span class="comment"><!-- .element: class="fragment custom blur animated scale-down" data-animated-scale-down-from="10" data-animated-scale-down-to="1" --></span></span><br><span class="line"></span><br><span class="line">`js [1|2|3|4]</span><br><span class="line"> let a = 1;</span><br><span class="line"> let b = 2;</span><br><span class="line"> let c = x => 1 + 2 + x;</span><br><span class="line"> c(3);</span><br><span class="line">`</span><br><span class="line"><span class="comment"><!-- .element: class="fragment fade-in animated rotate" data-animated-rotate-to="360deg"--></span></span><br><span class="line"></span><br><span class="line">`mermaid</span><br><span class="line">gantt</span><br><span class="line">dateFormat YYYY-MM-DD</span><br><span class="line">title 流程中心、表单中心</span><br><span class="line">excludes weekdays</span><br><span class="line"></span><br><span class="line">section 需求阶段</span><br><span class="line">需求调研 :desc1, 2023-11-15,2023-12-05</span><br><span class="line"></span><br><span class="line">section 设计阶段</span><br><span class="line">设计 :desc2,2023-12-05,2023-12-10</span><br><span class="line"></span><br><span class="line">section 开发阶段</span><br><span class="line">开发 :desc3,2023-12-01,2023-12-29</span><br><span class="line"></span><br><span class="line">section 测试阶段</span><br><span class="line">测试 :desc4,2023-12-20,2023-12-29</span><br><span class="line"></span><br><span class="line">section 上线启动</span><br><span class="line">部署培训 :desc5,2023-12-22,2023-12-29</span><br><span class="line">`</span><br><span class="line"><span class="comment"><!-- .element: class=" fragment fade-in animated move-to rotate" data-animated-rotate-to="360deg" data-animated-move-to-top="-50px" data-animated-move-to-left="0px" ---></span></span><br><span class="line"></span><br><span class="line">Note:</span><br><span class="line">第一个页面的备注文件</span><br><span class="line"></span><br><span class="line">----</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="comment"><!-- .slide: id="slide2" data-background-image="./2.jpeg" data-background-opacity="0.5"--></span></span><br><span class="line"></span><br><span class="line"># Index 2</span><br><span class="line"></span><br><span class="line">### 我是第二个页面</span><br><span class="line"></span><br><span class="line"><span class="comment"><!-- .element: class="fragment fade-in" --></span></span><br><span class="line"></span><br><span class="line">[打开index1](#/slide1)</span><br><span class="line"><span class="comment"><!-- .element: class="fragment fade-in" --></span></span><br><span class="line"></span><br><span class="line">[打开index3](#/slide3)</span><br><span class="line"><span class="comment"><!-- .element: class="fragment fade-in" --></span></span><br><span class="line"></span><br><span class="line">[打开index3.1](#/slide3.1)</span><br><span class="line"><span class="comment"><!-- .element: class="fragment fade-in" --></span></span><br><span class="line"></span><br><span class="line">[打开index3.2](#/slide3.2)</span><br><span class="line"><span class="comment"><!-- .element: class="fragment fade-in" --></span></span><br><span class="line"></span><br><span class="line">[打开index4](#/slide4)</span><br><span class="line"><span class="comment"><!-- .element: class="fragment fade-in" --></span></span><br><span class="line"></span><br><span class="line">Note:</span><br><span class="line">第二个页面的备注文件</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">----</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="comment"><!-- .slide: id="slide3" data-background-image="./3.jpeg" data-background-opacity="0.5"--></span></span><br><span class="line"></span><br><span class="line"># Index 3</span><br><span class="line"></span><br><span class="line">### 我是第三个页面</span><br><span class="line"></span><br><span class="line">我是<span class="comment"><!-- .element: style="color: lightred" --></span></span><br><span class="line">第三<span class="comment"><!-- .element: style="color: lightyellow" --></span></span><br><span class="line">个页面<span class="comment"><!-- .element: style="color: lightblue" --></span></span><br><span class="line"></span><br><span class="line">* 一 <span class="comment"><!-- .element: class="fragment fade-in" --></span></span><br><span class="line">* 二 <span class="comment"><!-- .element: class="fragment highlight-red" --></span></span><br><span class="line">* 三 <span class="comment"><!-- .element: class="fragment fade-out" --></span></span><br><span class="line"></span><br><span class="line">Note:</span><br><span class="line">第三个页面的备注文件</span><br><span class="line"></span><br><span class="line">--</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="comment"><!-- .slide: id="slide3.1" data-background-image="./3.jpeg" data-background-opacity="0.5" --></span></span><br><span class="line"></span><br><span class="line"># Index 3.1</span><br><span class="line"></span><br><span class="line">### 我是第三个页面</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">`mermaid</span><br><span class="line">gantt</span><br><span class="line">dateFormat YYYY-MM-DD</span><br><span class="line">title 流程中心、表单中心</span><br><span class="line">excludes weekdays</span><br><span class="line"></span><br><span class="line">section 需求阶段</span><br><span class="line">需求调研 :desc1, 2023-11-15,2023-12-05</span><br><span class="line"></span><br><span class="line">section 设计阶段</span><br><span class="line">设计 :desc2,2023-12-05,2023-12-10</span><br><span class="line"></span><br><span class="line">section 开发阶段</span><br><span class="line">开发 :desc3,2023-12-01,2023-12-29</span><br><span class="line"></span><br><span class="line">section 测试阶段</span><br><span class="line">测试 :desc4,2023-12-20,2023-12-29</span><br><span class="line"></span><br><span class="line">section 上线启动</span><br><span class="line">部署培训 :desc5,2023-12-22,2023-12-29</span><br><span class="line">`</span><br><span class="line"></span><br><span class="line">Note:</span><br><span class="line">第三个页面的备注文件</span><br><span class="line"></span><br><span class="line">--</span><br><span class="line"></span><br><span class="line"><span class="comment"><!-- .slide: id="slide3.2" data-background-image="./3.jpeg" data-background-opacity="0.5" --></span></span><br><span class="line"></span><br><span class="line"># Index 3.2</span><br><span class="line"></span><br><span class="line">### 我是第三个页面</span><br><span class="line"></span><br><span class="line">> 我是一个备注文件</span><br><span class="line"></span><br><span class="line">Note:</span><br><span class="line">第三个页面的备注文件</span><br><span class="line"></span><br><span class="line">----</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="comment"><!-- .slide: id="slide4" data-background-image="./4.jpeg" data-background-opacity="0.5" --></span></span><br><span class="line"></span><br><span class="line"># Index 4</span><br><span class="line"></span><br><span class="line">### 我是第四个页面</span><br><span class="line"></span><br><span class="line">Note:</span><br><span class="line">第四个页面的备注文件</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br></pre></td></tr></table></figure></details>]]></content>
<summary type="html"><link rel="stylesheet" class="aplayer-secondary-style-marker" href="/assets/css/APlayer.min.css"><script src="/assets/js/APlayer.min.js" cla</summary>
<category term="学习" scheme="https://rm-rf.ink/categories/%E5%AD%A6%E4%B9%A0/"/>
<category term="reveal.js" scheme="https://rm-rf.ink/tags/reveal-js/"/>
</entry>
<entry>
<title>大盘鸡🐔</title>
<link href="https://rm-rf.ink/*/c43e7c0d.html"/>
<id>https://rm-rf.ink/*/c43e7c0d.html</id>
<published>2024-01-16T02:06:47.000Z</published>
<updated>2024-01-22T07:30:32.655Z</updated>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="/assets/css/APlayer.min.css"><script src="/assets/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="/assets/js/Meting.min.js"></script><p>吃鸡最痛快的吃法之一,一定有大盘鸡。</p><span id="more"></span><h1 id="食材"><a class="markdownIt-Anchor" href="#食材"></a> 食材</h1><ul class="lvl-0"><li class="lvl-2"><p>鸡肉</p></li><li class="lvl-2"><p>梅花肉</p></li><li class="lvl-2"><p>土豆</p></li><li class="lvl-2"><p>洋葱</p></li><li class="lvl-2"><p>青椒</p></li><li class="lvl-2"><p>大葱</p></li><li class="lvl-2"><p>姜</p></li><li class="lvl-2"><p>蒜</p></li><li class="lvl-2"><p>八角</p></li><li class="lvl-2"><p>花椒</p></li><li class="lvl-2"><p>干辣椒</p></li><li class="lvl-2"><p>啤酒</p></li></ul><h1 id="调味料"><a class="markdownIt-Anchor" href="#调味料"></a> 调味料</h1><ul class="lvl-0"><li class="lvl-2"><p>花生油 20ml</p></li><li class="lvl-2"><p>郫县豆瓣酱 10ml</p></li><li class="lvl-2"><p>盐 5g</p></li><li class="lvl-2"><p>鸡精 5g</p></li><li class="lvl-2"><p>味精 5g</p></li><li class="lvl-2"><p>生抽 5g</p></li><li class="lvl-2"><p>蚝油5ml</p></li></ul><h1 id="操作"><a class="markdownIt-Anchor" href="#操作"></a> 操作</h1><ul class="lvl-0"><li class="lvl-2"><p>起锅烧油,放入梅花肉打底炒出油;</p></li><li class="lvl-2"><p>放入豆瓣炒出红油,放入八角、花椒、干辣椒;</p></li><li class="lvl-2"><p>放入洗干净的鸡肉,炒至肉质紧实;</p></li><li class="lvl-2"><p>放入大葱,盐、鸡精、生抽、蚝油;</p></li><li class="lvl-2"><p>翻炒2分钟,加入两罐啤酒,炖15分钟;</p></li><li class="lvl-2"><p>最后放入土豆、青椒、洋葱,再炖5分钟;</p></li><li class="lvl-2"><p>放入味精,搅拌均匀后出锅;</p></li></ul>]]></content>
<summary type="html"><p>吃鸡最痛快的吃法之一,一定有大盘鸡。</p></summary>
<category term="菜谱" scheme="https://rm-rf.ink/categories/%E8%8F%9C%E8%B0%B1/"/>
<category term="大盘鸡" scheme="https://rm-rf.ink/tags/%E5%A4%A7%E7%9B%98%E9%B8%A1/"/>
<category term="美食" scheme="https://rm-rf.ink/tags/%E7%BE%8E%E9%A3%9F/"/>
</entry>
<entry>
<title>麻辣炒虾尾 🦞</title>
<link href="https://rm-rf.ink/*/9ddcf808.html"/>
<id>https://rm-rf.ink/*/9ddcf808.html</id>
<published>2024-01-15T06:27:41.000Z</published>
<updated>2024-01-22T07:31:02.337Z</updated>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="/assets/css/APlayer.min.css"><script src="/assets/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="/assets/js/Meting.min.js"></script><p>我媳妇、儿子最喜欢的菜之一</p><span id="more"></span><h1 id="食材"><a class="markdownIt-Anchor" href="#食材"></a> 食材</h1><ul class="lvl-0"><li class="lvl-2"><p>小龙虾(冻虾尾)</p></li><li class="lvl-2"><p>大葱</p></li><li class="lvl-2"><p>姜</p></li><li class="lvl-2"><p>蒜</p></li><li class="lvl-2"><p>八角</p></li><li class="lvl-2"><p>花椒</p></li><li class="lvl-2"><p>干辣椒</p></li><li class="lvl-2"><p>啤酒</p></li></ul><h1 id="调味料"><a class="markdownIt-Anchor" href="#调味料"></a> 调味料</h1><ul class="lvl-0"><li class="lvl-2"><p>花生油 30ml</p></li><li class="lvl-2"><p>郫县豆瓣酱 10ml</p></li><li class="lvl-2"><p>盐 5g</p></li><li class="lvl-2"><p>味精 5g</p></li><li class="lvl-2"><p>鸡精 5g</p></li><li class="lvl-2"><p>生抽 5g</p></li><li class="lvl-2"><p>蚝油 5ml</p></li></ul><h1 id="操作"><a class="markdownIt-Anchor" href="#操作"></a> 操作</h1><ul class="lvl-0"><li class="lvl-2"><p>清水清洗小龙虾(冻虾尾),起锅烧油炸4分钟;</p></li><li class="lvl-2"><p>放入蒜末翻炒,再放入大葱、姜片、豆瓣酱;</p></li><li class="lvl-2"><p>放入八角、花椒、干辣椒,继续翻炒;</p></li><li class="lvl-2"><p>放入盐、味精、鸡精、生抽、蚝油调味;</p></li><li class="lvl-2"><p>炒香后加入2罐啤酒,煮20分钟;</p></li><li class="lvl-2"><p>最后收汁后即可盛出食用;</p></li></ul>]]></content>
<summary type="html"><p>我媳妇、儿子最喜欢的菜之一</p></summary>
<category term="菜谱" scheme="https://rm-rf.ink/categories/%E8%8F%9C%E8%B0%B1/"/>
<category term="美食" scheme="https://rm-rf.ink/tags/%E7%BE%8E%E9%A3%9F/"/>
<category term="虾尾" scheme="https://rm-rf.ink/tags/%E8%99%BE%E5%B0%BE/"/>
<category term="麻辣" scheme="https://rm-rf.ink/tags/%E9%BA%BB%E8%BE%A3/"/>
</entry>
<entry>
<title>前端定时器</title>
<link href="https://rm-rf.ink/*/3423146f.html"/>
<id>https://rm-rf.ink/*/3423146f.html</id>
<published>2024-01-11T07:09:31.000Z</published>
<updated>2024-03-08T14:22:38.473Z</updated>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="/assets/css/APlayer.min.css"><script src="/assets/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="/assets/js/Meting.min.js"></script><p> 前端开发中,会经常接到<code>定时器</code>的需求,<code>倒计时</code>、<code>计时器</code>、<code>动画效果</code>。</p><span id="more"></span><p> 在<code>博客</code>- <a href="/tags">标签</a>页面中使用到了<code>定时器</code>来做<code>::hover</code>动画效果。接下来我会对比一下<code>setTimeout</code>、<code>setInterval</code>、<code>requestAnimationFrame</code>来实现定时器。</p><div style="display:flex;justify-content: center;"> <div> <video width="100%" height="auto" src="/images/video/tags-view.mp4" autoplay muted loop></video> <div style="text-align: center;user-select: none;">视频:博客-标签</div> </div> </div><h1 id="1定时器"><a class="markdownIt-Anchor" href="#1定时器"></a> 1.定时器</h1><h2 id="11-settimeout"><a class="markdownIt-Anchor" href="#11-settimeout"></a> 1.1. setTimeout</h2><p> <strong>setTimeout是JavaScript中的一个函数,用于在指定的延迟时间后执行一段代码或函数。它的工作原理是在指定的延迟时间后,将代码或函数放入JavaScript的事件队列中,等待当前代码执行完毕后再执行。</strong></p><p><strong>setTimeout的语法如下:</strong></p><figure class="highlight javascript"><table><tr><td class="code"><pre><span class="line"><span class="built_in">setTimeout</span>(<span class="function">()=></span>||<span class="string">'func()'</span>,delay,[args...])</span><br></pre></td></tr></table></figure><p><strong>参数说明:</strong></p><ul class="lvl-0"><li class="lvl-2"><p><code>func|code</code>:要执行的函数或代码。</p></li><li class="lvl-2"><p><code>delay</code>:延迟时间,以毫秒为单位。</p></li><li class="lvl-2"><p><code>arg1, arg2, ...</code>:可选参数,表示传递给函数的参数。</p></li></ul><p> 当使用setTimeout时,它将在指定的延迟时间后执行一次函数或代码,然后返回一个定时器ID,可以使用<code>clearTimeout()</code>方法来取消定时器的执行。</p><p> 需要注意的是,setTimeout并不会立即执行函数或代码,而是在指定的延迟时间后放入事件队列中等待执行。如果当前的代码执行时间较长,或者存在其他的延迟操作,那么setTimeout中的函数或代码可能会在预期的时间之后才被执行。</p><p><strong>示例:</strong></p><figure class="highlight javascript"><table><tr><td class="code"><pre><span class="line"><span class="keyword">function</span> <span class="title function_">test</span>(<span class="params">args</span>){</span><br><span class="line"> <span class="variable language_">console</span>.<span class="title function_">log</span>(args)</span><br><span class="line">}</span><br><span class="line"><span class="built_in">setTimeout</span>(test,<span class="number">1000</span>,[<span class="string">'test'</span>,<span class="string">'test1'</span>]);</span><br><span class="line"><span class="built_in">setTimeout</span>(<span class="string">'test()'</span>,<span class="number">1000</span>,[<span class="string">'test'</span>,<span class="string">'test1'</span>]);</span><br><span class="line"><span class="title function_">cleatTimeout</span>();</span><br><span class="line"></span><br></pre></td></tr></table></figure><h2 id="12-setinterval"><a class="markdownIt-Anchor" href="#12-setinterval"></a> 1.2. setInterval</h2><p> <strong>setInterval是JavaScript中的一个函数,用于在指定的时间间隔后重复执行一段代码或函数。它的工作原理是在指定的时间间隔后,将代码或函数放入JavaScript的事件队列中,等待当前代码执行完毕后再执行。</strong></p><p><strong>setInterval的语法如下:</strong></p><figure class="highlight javascript"><table><tr><td class="code"><pre><span class="line"><span class="built_in">setInterval</span>(<span class="function">()=></span>||<span class="string">'func()'</span>,delay,[args...])</span><br></pre></td></tr></table></figure><p><strong>参数说明:</strong></p><ul class="lvl-0"><li class="lvl-2"><p><code>func|code</code>:要执行的函数或代码。</p></li><li class="lvl-2"><p><code>delay</code>:时间间隔,以毫秒为单位。</p></li><li class="lvl-2"><p><code>arg1, arg2, ...</code>:可选参数,表示传递给函数的参数。</p></li></ul><p> 当使用setInterval时,它将在指定的时间间隔后重复执行函数或代码,直到调用<code>clearInterval()</code>方法来停止执行。与setTimeout不同的是,setInterval会持续不断地重复执行函数或代码,直到被明确停止。</p><p> 需要注意的是,setInterval并不会立即执行函数或代码,而是在指定的时间间隔后放入事件队列中等待执行。如果当前的代码执行时间较长,或者存在其他的延迟操作,那么setInterval中的函数或代码可能会在预期的时间之后才被执行。</p><p><strong>示例:</strong></p><figure class="highlight javascript"><table><tr><td class="code"><pre><span class="line"><span class="keyword">function</span> <span class="title function_">test</span>(<span class="params">args</span>){</span><br><span class="line"> <span class="variable language_">console</span>.<span class="title function_">log</span>(args)</span><br><span class="line">}</span><br><span class="line"><span class="built_in">setInterval</span>(test,<span class="number">1000</span>,[<span class="string">'test'</span>,<span class="string">'test1'</span>]);</span><br><span class="line"><span class="built_in">setInterval</span>(<span class="string">'test()'</span>,<span class="number">1000</span>,[<span class="string">'test'</span>,<span class="string">'test1'</span>]);</span><br><span class="line"><span class="built_in">clearInterval</span>();</span><br></pre></td></tr></table></figure><h2 id="13-requestanimationframe"><a class="markdownIt-Anchor" href="#13-requestanimationframe"></a> 1.3. requestAnimationFrame</h2><p> <strong>requestAnimationFrame是Web动画API的一部分,用于在浏览器下一次重绘之前调用指定的回调函数,从而实现平滑的动画效果。与setTimeout和setInterval相比,requestAnimationFrame具有更高的性能和更好的用户体验。</strong></p><p><strong>requestAnimationFrame的语法如下:</strong></p><figure class="highlight javascript"><table><tr><td class="code"><pre><span class="line"><span class="title function_">requestAnimationFrame</span>(callback);</span><br></pre></td></tr></table></figure><p><strong>参数说明:</strong></p><ul class="lvl-0"><li class="lvl-2"><p><code>callback</code>:要执行的回调函数。</p></li></ul><p> 当使用requestAnimationFrame时,它会返回一个唯一的ID,可以使用这个ID来取消动画帧的调用。与setTimeout和setInterval不同的是,requestAnimationFrame的回调函数将在浏览器下一次重绘之前执行,而不是简单地等待指定的时间后执行。这样可以充分利用浏览器的重绘机制,实现更平滑的动画效果。</p><p> requestAnimationFrame的优势在于它能够根据浏览器的刷新率来同步动画,避免了由于不同的屏幕刷新率和硬件配置导致的动画卡顿和闪烁。同时,它也避免了在动画过程中不必要的重绘和计算,提高了动画的性能和响应性。</p><p> 使用requestAnimationFrame时需要注意,它只会在浏览器处于激活状态时执行回调函数。如果浏览器处于最小化或隐藏状态,那么回调函数将不会被执行。因此,在使用requestAnimationFrame时,需要确保浏览器处于激活状态,或者在回调函数中添加适当的逻辑来处理浏览器不处于激活状态的情况。</p><p><strong>示例:</strong></p><figure class="highlight javascript"><table><tr><td class="code"><pre><span class="line"><span class="keyword">function</span> <span class="title function_">frame</span>(<span class="params"></span>){</span><br><span class="line"> <span class="variable language_">console</span>.<span class="title function_">log</span>(<span class="string">'frame'</span>)</span><br><span class="line">}</span><br><span class="line"><span class="title function_">requestAnimationFrame</span>(frame);</span><br></pre></td></tr></table></figure><h1 id="2-标签动画"><a class="markdownIt-Anchor" href="#2-标签动画"></a> 2. 标签动画</h1><p> 使用 <code>requestAnimationFrame</code> 可以替代 <code>setInterval</code> 来实现定时任务,因为 <code>requestAnimationFrame</code> 更加高效,能够根据屏幕刷新率来同步动画,避免了不必要的重绘和计算。</p><p>下面是使用 <code>requestAnimationFrame</code> 实现 <code>setInterval</code> 更新<code>博客</code>- <a href="/tags">标签</a>的示例代码:</p><figure class="highlight javascript"><table><tr><td class="code"><pre><span class="line"><span class="comment">/***</span></span><br><span class="line"><span class="comment"> * 兼容不支持requestAnimationFrame的浏览器</span></span><br><span class="line"><span class="comment"> ***/</span></span><br><span class="line"><span class="variable language_">window</span>.<span class="property">requestAnimationFrame</span> = (<span class="keyword">function</span> (<span class="params"></span>) {</span><br><span class="line"> <span class="keyword">return</span> <span class="variable language_">window</span>.<span class="property">requestAnimationFrame</span> ||</span><br><span class="line"> <span class="variable language_">window</span>.<span class="property">webkitRequestAnimationFrame</span> ||<span class="comment">/* Safari 和 Chrome */</span></span><br><span class="line"> <span class="variable language_">window</span>.<span class="property">mozRequestAnimationFrame</span> ||<span class="comment">/* Firefox */</span></span><br><span class="line"> <span class="variable language_">window</span>.<span class="property">oRequestAnimationFrame</span> ||<span class="comment">/* Opera */</span></span><br><span class="line"> <span class="variable language_">window</span>.<span class="property">msRequestAnimationFrame</span> ||<span class="comment">/* IE 9 */</span></span><br><span class="line"> <span class="keyword">function</span> (<span class="params">callback</span>) {</span><br><span class="line"> <span class="variable language_">window</span>.<span class="built_in">setTimeout</span>(callback, <span class="number">6000</span> / <span class="number">60</span>)</span><br><span class="line"> }</span><br><span class="line">})();</span><br><span class="line"><span class="variable language_">window</span>.<span class="property">cancelAnimationFrame</span> = (<span class="keyword">function</span> (<span class="params"></span>) {</span><br><span class="line"> <span class="keyword">return</span> <span class="variable language_">window</span>.<span class="property">cancelAnimationFrame</span> ||</span><br><span class="line"> <span class="variable language_">window</span>.<span class="property">webkitCancelAnimationFrame</span> ||</span><br><span class="line"> <span class="variable language_">window</span>.<span class="property">mozCancelAnimationFrame</span> ||</span><br><span class="line"> <span class="variable language_">window</span>.<span class="property">oCancelAnimationFrame</span> ||</span><br><span class="line"> <span class="variable language_">window</span>.<span class="property">msCancelAnimationFrame</span> || <span class="built_in">clearTimeout</span></span><br><span class="line">})();</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="comment">/**</span></span><br><span class="line"><span class="comment"> * 设置精度定时器</span></span><br><span class="line"><span class="comment"> * <span class="doctag">@param</span> {<span class="type">function</span>} 回调函数</span></span><br><span class="line"><span class="comment"> * <span class="doctag">@param</span> {<span class="type">number</span>} 延迟时间</span></span><br><span class="line"><span class="comment"> * <span class="doctag">@return</span> {<span class="type">number</span>} 定时器ID</span></span><br><span class="line"><span class="comment"> */</span></span><br><span class="line"> <span class="keyword">function</span> <span class="title function_">setIntervalPrecision</span>(<span class="params">callback, delay</span>) {</span><br><span class="line"> <span class="comment">// 生成并记录定时器ID</span></span><br><span class="line"> <span class="keyword">let</span> obj = <span class="variable language_">window</span>.<span class="property">interValPrecisionObj</span> || (<span class="variable language_">window</span>.<span class="property">interValPrecisionObj</span> = { <span class="attr">num</span>: <span class="number">0</span> })</span><br><span class="line"> obj.<span class="property">num</span>++</span><br><span class="line"> obj[<span class="string">'n'</span> + obj.<span class="property">num</span>] = <span class="literal">true</span></span><br><span class="line"> <span class="keyword">var</span> intervalId = obj.<span class="property">num</span></span><br><span class="line"> <span class="comment">// 开始时间</span></span><br><span class="line"> <span class="keyword">var</span> startTime = +<span class="keyword">new</span> <span class="title class_">Date</span>()</span><br><span class="line"> <span class="comment">// 已执行次数</span></span><br><span class="line"> <span class="keyword">var</span> count = <span class="number">0</span></span><br><span class="line"> <span class="comment">// 延迟时间</span></span><br><span class="line"> delay = delay || <span class="number">0</span></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"> ;(<span class="keyword">function</span> <span class="title function_">loop</span>(<span class="params"></span>) {</span><br><span class="line"> <span class="comment">// 定时器被清除,则终止</span></span><br><span class="line"> <span class="keyword">if</span> (!obj[<span class="string">'n'</span> + intervalId]) <span class="keyword">return</span></span><br><span class="line"></span><br><span class="line"> <span class="comment">// 满足条件执行回调</span></span><br><span class="line"> <span class="keyword">if</span> (+<span class="keyword">new</span> <span class="title class_">Date</span>() > startTime + delay * (count + <span class="number">1</span>)) {</span><br><span class="line"> count++</span><br><span class="line"> <span class="title function_">callback</span>(count)</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> <span class="variable language_">window</span>.<span class="title function_">requestAnimationFrame</span>(loop)</span><br><span class="line"> })()</span><br><span class="line"></span><br><span class="line"> <span class="keyword">return</span> intervalId</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="comment">/**</span></span><br><span class="line"><span class="comment"> * 清除精度定时器</span></span><br><span class="line"><span class="comment"> * <span class="doctag">@param</span> {<span class="type">number</span>} 定时器ID</span></span><br><span class="line"><span class="comment"> */</span></span><br><span class="line"><span class="keyword">function</span> <span class="title function_">clearIntervalPrecision</span>(<span class="params">intervalId</span>) {</span><br><span class="line"> <span class="keyword">if</span> (<span class="variable language_">window</span>.<span class="property">interValPrecisionObj</span>) {</span><br><span class="line"> <span class="variable language_">window</span>.<span class="title function_">cancelAnimationFrame</span>(<span class="string">'n'</span> + intervalId)</span><br><span class="line"> <span class="keyword">delete</span> <span class="variable language_">window</span>.<span class="property">interValPrecisionObj</span>[<span class="string">'n'</span> + intervalId]</span><br><span class="line"> }</span><br><span class="line">}</span><br><span class="line"><span class="comment">//loopHover 自己的业务实现</span></span><br><span class="line">setIntervalPrecision(loopHover, <span class="number">100</span>)</span><br></pre></td></tr></table></figure>]]></content>
<summary type="html"><p> 前端开发中,会经常接到<code>定时器</code>的需求,<code>倒计时</code>、<code>计时器</code>、<code>动画效果</code>。</p></summary>
<category term="工作" scheme="https://rm-rf.ink/categories/%E5%B7%A5%E4%BD%9C/"/>
<category term="react" scheme="https://rm-rf.ink/tags/react/"/>
<category term="vue" scheme="https://rm-rf.ink/tags/vue/"/>
<category term="javascript" scheme="https://rm-rf.ink/tags/javascript/"/>
<category term="typescript" scheme="https://rm-rf.ink/tags/typescript/"/>
<category term="setTimeout" scheme="https://rm-rf.ink/tags/setTimeout/"/>
<category term="setInterval" scheme="https://rm-rf.ink/tags/setInterval/"/>
<category term="requestAnimationFrame" scheme="https://rm-rf.ink/tags/requestAnimationFrame/"/>
</entry>
<entry>
<title>炝锅面</title>
<link href="https://rm-rf.ink/*/b2113df8.html"/>
<id>https://rm-rf.ink/*/b2113df8.html</id>
<published>2024-01-11T06:44:21.000Z</published>
<updated>2024-01-22T07:31:30.204Z</updated>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="/assets/css/APlayer.min.css"><script src="/assets/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="/assets/js/Meting.min.js"></script><p>河南大多地方以面食为主,炝锅面又是最经典的面食之一。</p><span id="more"></span><h1 id="食材"><a class="markdownIt-Anchor" href="#食材"></a> 食材</h1><ul class="lvl-0"><li class="lvl-2"><p>干面条</p></li><li class="lvl-2"><p>番茄</p></li><li class="lvl-2"><p>梅花肉</p></li><li class="lvl-2"><p>大葱</p></li><li class="lvl-2"><p>白菜</p></li><li class="lvl-2"><p>姜</p></li><li class="lvl-2"><p>干辣椒</p></li><li class="lvl-2"><p>花椒</p></li></ul><h1 id="调味料"><a class="markdownIt-Anchor" href="#调味料"></a> 调味料</h1><ul class="lvl-0"><li class="lvl-2"><p>花生油 15ml</p></li><li class="lvl-2"><p>盐 5g</p></li><li class="lvl-2"><p>味精 5g</p></li><li class="lvl-2"><p>鸡精 5g</p></li><li class="lvl-2"><p>生抽 5g</p></li><li class="lvl-2"><p>十三香 2g</p></li><li class="lvl-2"><p>香油 5ml</p></li></ul><h1 id="操作"><a class="markdownIt-Anchor" href="#操作"></a> 操作</h1><ul class="lvl-0"><li class="lvl-2"><p>大葱切碎;番茄开水烫后去皮切块;白菜手撕小块备用;(个人喜欢可以放一些黄豆芽)</p></li><li class="lvl-2"><p>起锅烧油,油热调小火,放入花椒炸焦,撇出丢掉;</p></li><li class="lvl-2"><p>梅花肉切小片,起锅热油,放入肥肉超出油后放入瘦肉和姜片炒香;</p></li><li class="lvl-2"><p>放入番茄翻炒出汁后放入白菜翻炒;</p></li><li class="lvl-2"><p>放入盐、十三香、生抽后继续翻炒,白菜炒夹生后加入开水;</p></li><li class="lvl-2"><p>水开放入干面条;(自己估算食用的量)</p></li><li class="lvl-2"><p>煮至2分钟后,加入鸡精、味精;</p></li><li class="lvl-2"><p>出锅前放入少许香油,味道更佳;</p></li></ul>]]></content>
<summary type="html"><p>河南大多地方以面食为主,炝锅面又是最经典的面食之一。</p></summary>
<category term="菜谱" scheme="https://rm-rf.ink/categories/%E8%8F%9C%E8%B0%B1/"/>
<category term="美食" scheme="https://rm-rf.ink/tags/%E7%BE%8E%E9%A3%9F/"/>
<category term="河南" scheme="https://rm-rf.ink/tags/%E6%B2%B3%E5%8D%97/"/>
</entry>
<entry>
<title>芝麻叶糊涂面</title>
<link href="https://rm-rf.ink/*/1d180e51.html"/>
<id>https://rm-rf.ink/*/1d180e51.html</id>
<published>2024-01-10T04:46:03.000Z</published>
<updated>2024-01-17T09:58:34.642Z</updated>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="/assets/css/APlayer.min.css"><script src="/assets/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="/assets/js/Meting.min.js"></script><p>芝麻叶面条是河南的家常面食,喜不喜欢面食,吃上一次就会想第二次。</p><span id="more"></span><h1 id="食料"><a class="markdownIt-Anchor" href="#食料"></a> 食料</h1><ul class="lvl-0"><li class="lvl-2"><p>芝麻叶</p></li><li class="lvl-2"><p>豆腐丁</p></li><li class="lvl-2"><p>韭菜</p></li><li class="lvl-2"><p>小香芹</p></li><li class="lvl-2"><p>面粉</p></li><li class="lvl-2"><p>葱</p></li><li class="lvl-2"><p>蒜</p></li><li class="lvl-2"><p>干辣椒</p></li></ul><h1 id="调味料"><a class="markdownIt-Anchor" href="#调味料"></a> 调味料</h1><ul class="lvl-0"><li class="lvl-2"><p>花生油 25ml</p></li><li class="lvl-2"><p>盐 5g</p></li><li class="lvl-2"><p>味精 5g</p></li><li class="lvl-2"><p>鸡精 5g</p></li><li class="lvl-2"><p>十三香 2g</p></li><li class="lvl-2"><p>香油 5ml</p></li></ul><h1 id="操作"><a class="markdownIt-Anchor" href="#操作"></a> 操作</h1><ul class="lvl-0"><li class="lvl-2"><p>开水后放入芝麻叶,煮至软化即可,沥干水分备用;</p></li><li class="lvl-2"><p>韭菜切段,芹菜杆切碎,加入香油、盐腌制备用;</p></li><li class="lvl-2"><p>豆腐切丁放入花生油煎至焦香;</p></li><li class="lvl-2"><p>碗中放入20g面粉,花生油烧热,浇入后搅拌至面糊状;</p></li><li class="lvl-2"><p>热油放入葱、蒜、干辣椒炒香;</p></li><li class="lvl-2"><p>放入芝麻叶、豆腐丁、芹菜叶,翻炒2分钟后加入开水;</p></li><li class="lvl-2"><p>锅内下入干面条,煮熟后,加入少许盐、味精、鸡精、十三香、面油;</p></li><li class="lvl-2"><p>最后倒入腌好的韭菜、芹菜,搅拌几次后出锅;</p></li></ul>]]></content>
<summary type="html"><p>芝麻叶面条是河南的家常面食,喜不喜欢面食,吃上一次就会想第二次。</p></summary>
<category term="菜谱" scheme="https://rm-rf.ink/categories/%E8%8F%9C%E8%B0%B1/"/>
<category term="美食" scheme="https://rm-rf.ink/tags/%E7%BE%8E%E9%A3%9F/"/>
<category term="河南" scheme="https://rm-rf.ink/tags/%E6%B2%B3%E5%8D%97/"/>
<category term="芝麻叶" scheme="https://rm-rf.ink/tags/%E8%8A%9D%E9%BA%BB%E5%8F%B6/"/>
<category term="面条" scheme="https://rm-rf.ink/tags/%E9%9D%A2%E6%9D%A1/"/>
<category term="糊涂" scheme="https://rm-rf.ink/tags/%E7%B3%8A%E6%B6%82/"/>
</entry>
</feed>