58 lines
3.4 KiB
Markdown
58 lines
3.4 KiB
Markdown
![]() |
---
|
|||
|
title: Clojure Create Local Variables with Let
|
|||
|
localeTitle: Clojure Создание локальных переменных с Let
|
|||
|
---
|
|||
|
`let` это фундаментальная часть Clojure. Если `def` создает глобальную переменную, `let` создает локальную переменную.
|
|||
|
```
|
|||
|
(def x 5)
|
|||
|
(println x)
|
|||
|
; => 5
|
|||
|
; nil
|
|||
|
(let [x 2]
|
|||
|
(println x))
|
|||
|
; => 2
|
|||
|
; nil
|
|||
|
(println x)
|
|||
|
; => 5
|
|||
|
; nil
|
|||
|
```
|
|||
|
|
|||
|
 [IDEOne!](https://ideone.com/xcNth2)
|
|||
|
|
|||
|
`x` в этом примере никогда не изменяется. `x` просто ссылается на что-то другое внутри нашей привязки `let` . Это может быть полезным способом избежать повторения внутри функции.
|
|||
|
|
|||
|
Это невероятно полезно. Слишком много глобальных переменных может привести к неприятным ошибкам и непреднамеренному поведению.
|
|||
|
```
|
|||
|
(def x 5)
|
|||
|
(defn add-5 [y] (+ xy))
|
|||
|
(add-5 5)
|
|||
|
; => 10
|
|||
|
(defn change-x []
|
|||
|
(def x 6))
|
|||
|
(change-x)
|
|||
|
; => nil
|
|||
|
(add-5 5)
|
|||
|
; => 11
|
|||
|
```
|
|||
|
|
|||
|
 [IDEOne!](https://ideone.com/MFjA3C)
|
|||
|
|
|||
|
О, о! Это больше не добавляет 5! Конечно, этот пример немного глуп, но использование слишком большого числа глобальных переменных может привести к ошибкам, столь же страшным, как этот.
|
|||
|
|
|||
|
**Примечание.** Мы не _переназначаем_ здесь `x` , как на языке C. Мы просто создаем новую переменную, которая также называется x. Это _очень, очень, **очень**_ плохая идея.
|
|||
|
|
|||
|
## Множественные привязки
|
|||
|
|
|||
|
`let` также может определять сразу несколько переменных и может назначать переменные выражениям.
|
|||
|
```
|
|||
|
(let [spam "foo"
|
|||
|
ham (str "b" "ar")] ; str is a function that concatenates strings
|
|||
|
(println spam ham)) ; or converts variables into strings.
|
|||
|
; => foo bar
|
|||
|
; nil
|
|||
|
```
|
|||
|
|
|||
|
 [IDEOne!](https://ideone.com/y5EBIM)
|
|||
|
|
|||
|
| [ Предыдущая](//forum.freecodecamp.com/t/clojure-conditionals/18412) | [ Главная ](//forum.freecodecamp.com/t/clojure-resources/18422) | [следующий ](//forum.freecodecamp.com/t/clojure-loop-recur/18418) |
|
|||
|
| [Условные](//forum.freecodecamp.com/t/clojure-conditionals/18412) | [Содержание](//forum.freecodecamp.com/t/clojure-resources/18422) | [Loop и Recur](//forum.freecodecamp.com/t/clojure-loop-recur/18418) |
|