- Clojure 教程 (jiào chéng)
- Clojure - 首頁 (shǒu yè)
- Clojure - 概述 (gài shuò)
- Clojure - 環境 (huán jìng)
- Clojure - 基本語法 (jī běn yǔ fǎ)
- Clojure - REPL
- Clojure - 資料型別 (shù jù lèi xíng)
- Clojure - 變數 (biàn liàng)
- Clojure - 運算子 (yùn suàn fú)
- Clojure - 迴圈 (xún huán)
- Clojure - 決策 (jué cè)
- Clojure - 函式 (hán shù)
- Clojure - 數字 (shù zì)
- Clojure - 遞迴 (dì guī)
- Clojure - 檔案 I/O
- Clojure - 字串 (zì fù chuàn)
- Clojure - 列表 (liè biǎo)
- Clojure - 集合 (jí hé)
- Clojure - 向量 (wèi liàng)
- Clojure - 對映 (yìng shè)
- Clojure - 名稱空間 (míng mìng kōng jiān)
- Clojure - 異常處理 (yí cháng chǔ lǐ)
- Clojure - 序列 (xuán liè)
- Clojure - 正則表示式 (zhèng zé biǎo dá shì)
- Clojure - 斷言 (duàn yán)
- Clojure - 解構 (jiě gòu)
- Clojure - 日期與時間 (rì qī yǔ shí jiān)
- Clojure - 原子 (yuán zǐ)
- Clojure - 元資料 (yuán shù jù)
- Clojure - StructMaps
- Clojure - 代理 (dài lǐ)
- Clojure - 觀察者 (guān chá zhě)
- Clojure - 宏 (hóng)
- Clojure - 引用值 (yǐn yòng zhí)
- Clojure - 資料庫 (shù jù kù)
- Clojure - Java 介面 (jiē kǒu)
- Clojure - 併發程式設計 (bìng fā biān chéng)
- Clojure - 應用 (yìng yòng)
- Clojure - 自動化測試 (zì dòng huà cè shì)
- Clojure - 庫 (kù)
- Clojure 有用資源 (yǒu yòng zī yuán)
- Clojure - 快速指南 (kuài sù zhǐ nán)
- Clojure - 有用資源 (yǒu yòng zī yuán)
- Clojure - 討論 (táo lùn)
Clojure - 代理 (dài lǐ)
正如多次指出的那樣,Clojure 是一種程式語言,其中許多資料型別都是不可變的,這意味著更改變數值的唯一方法是建立一個新變數並將新值賦給它。但是,Clojure確實提供了一些可以建立可變狀態的元素。我們已經看到這可以透過原子資料型別來實現。另一種實現方法是透過代理。
代理 (dài lǐ) 提供單個位置的獨立非同步更改。代理在其生命週期內繫結到單個儲存位置,並且僅允許作為操作結果對該位置(到新狀態)進行變異。操作是非同步應用於代理狀態的函式(可選地,帶有其他引數),其返回值成為代理的新狀態。
關於代理,Clojure 中可以執行以下操作。
| 序號 (xué hào) | 操作和描述 (cāo zuò hé miáo shù) |
|---|---|
| 1 | agent
使用 agent 命令建立代理。 |
| 2 | send
此函式用於向代理傳送值。 |
| 3 | shutdown-agents
此函式用於關閉任何正在執行的代理。 |
| 4 | send-off
在某些情況下,代理被分配一個阻塞性質的函式。 |
| 5 | await-for
由於更新代理的值時存在延遲,Clojure 提供了一個“await-for”函式,用於指定以毫秒為單位等待代理更新的時間。 |
| 6 | await
阻塞當前執行緒(無限期!),直到來自此執行緒或代理到代理的所有已分派操作都已發生。將阻塞失敗的代理。 |
| 7 | agent-error
如果代理失敗,則返回在代理的非同步操作期間引發的異常。如果代理不失敗,則返回 nil。 |
廣告 (guǎng gào)