io!ブロックはClojureで使用されるでしょうか?私はその目的を理解するのに苦労している。ioの実用は何ですか? Clojureのブロック?
答えて
これはSTMシステムの一部ですensuring that code related to IO is not used inside STM transactions.トランザクションが実行されている間に別のスレッドが矛盾したデータをコミットすると、clojureはトランザクションを再試行するため、そのトランザクションによって生成されたIOはメモリの状態を表すため、捨てられた。
[source](https://github.com/clojure/clojure/blob/clojure-1.9.0-alpha14/src/clj/clojure/core.clj#L2485)を見ると、トランザクションが進行中の場合は例外をスローします。それ以外の場合は、通常通りに本体を実行します。 –
これは参考になりますが抽象的です。あなたが実際に使っているシナリオの例:あなたがIOをするいくつかの関数、ユーザに知られているもの、ユーザにとって未知のものを持つパッケージを書いているとします。彼らが安全でない方法で(つまりトランザクション内で)使用されている場合には、これらのすべてがスローされ、エラーになるためには '(io!&body)'を使用してください – jaimedash
は過去7年間clojureで働いており、一般的な例はありません。 –
- 1. 単純な言葉で、IOとノンブロッキングIOをブロックするのは何ですか?
- 2. Clojureメタデータの用途は何ですか?
- 3. Androidの非ブロックIO
- 4. org.apache.commons:commons-ioとcommons-io:commons-ioの違いは何ですか?
- 5. Clojure同期ブロック
- 6. 非メインスレッドで非同期ioとdo ioの違いは何ですか?
- 7. Clojure: `と〜@の意味は何ですか?
- 8. 非ブロックIOコールのaspectjタイマー
- 9. RDO for iOとは何ですか?
- 10. Clojureでマップをスライスする慣用方法は何ですか?
- 11. FilewatcherはJavaのIOを非ブロックと見なしますか?
- 12. clojureにバインディングを使用する良い例は何ですか?
- 13. Clojure 1.4ではrequireを参照するのは何ですか?
- 14. 他のプラットフォーム用のClojureの実装ですか?
- 15. PerlのIO :: Pipeコンストラクタの引数は何ですか?
- 16. JavaのファイルIOの最適な方法は何ですか
- 17. ClojureでADTを実装するためには何が必要ですか?
- 18. [Scala]:アクターとブロックIOの問題
- 19. Clojureでベクトルに対してダブルループを実装するための慣用方法は何ですか?
- 20. Haskellは実際の型IO
- 21. 引用ブロックの戻り値は何ですか?
- 22. clojureの通常の命名規則は何ですか?
- 23. Clojureのseqとシーケンスの違いは何ですか?
- 24. Clojureのdefとdefonceの違いは何ですか?
- 25. Clojureの〜や〜の目的は何ですか?
- 26. Lisp/Clojureのプロシージャと# 'プロシージャの違いは何ですか?
- 27. ClojureのAOTの制限は何ですか?
- 28. clojureの#と%の名前は何ですか?
- 29. コンポーネント内のMasonブロックの実行順序は何か
- 30. Clojureでwith-redefsとwith-redefs-fnの違いは何ですか?
決してそれを使用しませんでしたが、機能/コードがトランザクションで使用されないように強制する方法のようです。 – Carcigenicate
興味深い質問...メーリングリストをすばやく検索しました。[ワンスレッド](https://groups.google.com/d/msg/clojure/ZZP93tVmot4/DoDBAlDrHmYJ)と[another](https:// groups .google.com/d/msg/clojure/TAhNp7rb2Go/Kij920UDKbwJ)、特に[導入されたスレッド](https://groups.google.com/d/msg/clojure/JRRegOOwohE/3gWZjmWClpUJ) [コミット](https://github.com/clojure/clojure/commit/c5e8c6f06292fab26d29cb951d8400394e0f8258))。 – glts
ありがとう@glts非常に便利なリンク。次の2つの答えがうまくまとめられていると思います。「明示的にio!コールを使ってコードを囲むように他のコードを停止すると思う。 その宣言的な方法:私はioをやっている! 「副作用コードを誤ってトランザクションで使用できないようにマークすることがポイントです。」 – Aspasia