From 0666e81df74c3c68b6ddbd99f456e4d57129f157 Mon Sep 17 00:00:00 2001
From: TonalidadeHidrica <47710717+TonalidadeHidrica@users.noreply.github.com>
Date: Thu, 6 Feb 2025 00:03:29 +0900
Subject: [PATCH 1/4] =?UTF-8?q?if=20let=20=E3=82=B9=E3=82=B3=E3=83=BC?=
=?UTF-8?q?=E3=83=97=E3=82=92=E9=80=94=E4=B8=AD=E3=81=BE=E3=81=A7=E7=BF=BB?=
=?UTF-8?q?=E8=A8=B3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/rust-2024/temporary-if-let-scope.md | 191 ++++++++++++++++++++++++
1 file changed, 191 insertions(+)
create mode 100644 src/rust-2024/temporary-if-let-scope.md
diff --git a/src/rust-2024/temporary-if-let-scope.md b/src/rust-2024/temporary-if-let-scope.md
new file mode 100644
index 0000000..92e9b4b
--- /dev/null
+++ b/src/rust-2024/temporary-if-let-scope.md
@@ -0,0 +1,191 @@
+
+
+# `if let` の一時スコープ
+
+
+
+## 概要
+
+
+
+- 式 `if let $pat = $expr { .. } else { .. }` において `$expr`を評価する際に作られる一時値は、`else` 節以降が実行される前にドロップされます。
+
+
+
+## 詳細
+
+
+
+2024 エディションでは、`if let` 式の被検査体 (scurtinee) [^scurtinee]における[一時値 (temporary value)]のドロップスコープが変わります。
+これは、一時値の生存期間が長すぎることによる、ある意味想定外の挙動を避けるためのものです。
+
+
+
+2024 より前は、以下のように、一時値が `if let` 式自体の末尾まで生存し続けることがありました。
+
+
+
+```rust,edition2021
+// 2024 より前
+# use std::sync::RwLock;
+
+fn f(value: &RwLock