Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
clojure.core.async中的函数名从何而来,它们是否可以使用描述性名称?_Clojure_Core.async - Fatal编程技术网

clojure.core.async中的函数名从何而来,它们是否可以使用描述性名称?

clojure.core.async中的函数名从何而来,它们是否可以使用描述性名称?,clojure,core.async,Clojure,Core.async,我最近开始使用core.async库,我有点困惑它为什么使用这样的函数名: > > chan 我总是要考虑感叹号的数量,例如,当我不确定哪个是停车版本,哪个是阻塞版本时。这让我想起了《不要让我思考》一书和《Clojure编程》一书,其中写道: Clojure的语法减少了读写代码所需的认知负荷。。。每当程序员不得不停下来思考这个问题时(或者在手册中查找)。。。出现了心理页面错误 对此的解释是什么?我推测,当使用core.async时,您将多次编写goparking putblocking ta

我最近开始使用
core.async
库,我有点困惑它为什么使用这样的函数名:

  • >
  • >
  • chan
我总是要考虑感叹号的数量,例如,当我不确定哪个是停车版本,哪个是阻塞版本时。这让我想起了《不要让我思考》一书和《Clojure编程》一书,其中写道:

Clojure的语法减少了读写代码所需的认知负荷。。。每当程序员不得不停下来思考这个问题时(或者在手册中查找)。。。出现了心理页面错误


对此的解释是什么?

我推测,当使用core.async时,您将多次编写
go
parking put
blocking take
,因此认为使用速记是合适的
一个小小的助记符:分别想想

编辑:观看后,我想添加此报价(跳到):

[…]第一个感叹号表示它不是事务安全的[…],第二个感叹号表示这是一个阻塞操作


我分担你的痛苦。我总是不得不停下来思考,以便把像
这样的名字翻译成“停车版的take,只在go循环中起作用”。我已经开始研究一些更人性化的名字(仍在进行中!):

(ns tupelo.async)
“tupelo-让Clojure更加甜美”
(:require[clojure.core:as clj]
[clojure.core.async:as clj.async])
(:gen类)
; #todo添加测试
; #todo向自述文件添加文档
(defmacro put go![&args]
`(clj.async/>!~@args))
(defmacro开始![&args]
`(clj.async/!!args))
(现在开始定义![&args]
(应用clj.async/

我们是否应该将
*
替换为
乘法
,将
cons
替换为
预加单个项目
?@amalloy-PC是否正在悄悄进入最后一个“安全区”我已经离开了!?!??我正在编辑问题标题,以使其不太可能被关闭。听起来这有点令人沮丧,没有人喜欢让他们的问题被搁置。对此表示抱歉。你能编辑正文,以便更容易地告诉我一个好的答案是什么样的吗?对我来说,这似乎是一个合理的问题,不确定为什么会有这么多问题否决票。我个人喜欢。我认为速记是精心挑选和恰当的。选择名字是一件重要的事情,我们应该更多地讨论。它们是神秘的,它们是恰当的。@Arthurlfeldt我否决了投票,投票结束了投票,因为对我来说,最初的标题和正文表明了一个非建设性的问题,其答案将是正确的主要是基于意见。你给出的问题的更新标题将使其更具建设性,但由于你在评论中要求OP编辑他的问题以澄清他的意图,我一直在等待他在撤回我的投票之前进行编辑。如果你和Timothy认为这个问题,就目前而言,是有用的和建设性的艾维,我很乐意收回我的投票。
bang意味着国家机器,两个bang意味着线程
这可能是你答案中最有见解的部分。这是一幅很棒的图片。你成功了吗?@AdamArold:谢谢,我是在母校做的关于Clojure的演讲中做的。
(ns tupelo.async
  "tupelo - Making Clojure even sweeter"
  (:require [clojure.core                 :as clj]
            [clojure.core.async           :as clj.async] )
  (:gen-class))

; #todo add tests
; #todo add docs to README

(defmacro put-go! [& args]
  `(clj.async/>! ~@args))

(defmacro take-go! [& args]
  `(clj.async/<! ~@args))

(defn put-now! [& args]
  (apply clj.async/>!! args))

(defn take-now! [& args]
  (apply clj.async/<!! args))

(defn put-later! [& args]
  (apply clj.async/put! args))

(defn take-later! [& args]
  (apply clj.async/take! args))