我正在使用一个带参数的函数,如下所示:
(test-function '((gate 1) (gate 3) (gate 2)))
列表参数可以包含任意数量的元素,其中每个元素的形式为(gate x)其中x可以是从0到8我有一个功能,整数generate-gate-list,其生成随机列表的长度(高达10)和内容,尽管它们总是上面的形式.
:生成栅极列表的示例输出((gate 2)),(()),((gate 1) (gate 6))等.
我希望能够嵌套generate-gate-list在内部,test-function以便我可以测试一堆随机生成的列表,而不事先生成它们.换句话说,我想要这样的东西:(test-function '(generate-gate-list))除了已经评估了generate-gate-list之外.我已经尝试了某种宏语法 - 引用和取消引用,但这会导致已解决的变量,比如(user/gate 3)哪些搞砸了测试功能.这是我的生成门列表代码:
(defn generate-gate-list []
(map symbol (repeatedly (rand-int 10) #(random-gate))))
Run Code Online (Sandbox Code Playgroud)
random-gate输出门元素作为字符串,即"(gate 3)"或"(gate 2)".
所以简而言之,我希望(test-function (something-here (generate-gate-list)))或者(test-function (modified-generate-gate-list))相当于(test-function '((gate 1) (gate 4) (gate 2)))或者生成门列表的其他任意输出.谢谢!
我有一个没有副作用的函数列表并采用相同的参数.我需要评估列表中的每个函数,并将结果放入另一个列表中.Clojure中有一个功能吗?
目标:构造一个ClojureScript函数,该函数接受一个字符串s并返回带有名称的唯一通道(str s "-chan")(如果该通道不存在,则创建它).这是我的尝试:
(defn string-channel
[s]
(let [chan-name (symbol (str s "-chan"))]
(defonce chan-name (chan))
chan-name))
Run Code Online (Sandbox Code Playgroud)
这会产生错误.我如何实现这一目标?请注意,由于我在ClojureScript中,eval如果解决方案涉及宏,我无法使用该构造.
我有更新DOM的代码.new-recipe!调用API来获取新的配方字符串.update-recipe-state接下来在屏幕中更新此状态.最后我们打电话给update-transition-buttons.
(defn- add-listener-to-recipe-button! []
"Listens to go button, creates a new recipe and displays it"
(create-click-event-listener! (dommy/sel1 :#button-start)
#(go (new-recipe!)
(<! (timeout 2000))
(update-recipe-state!)
(<! (timeout 2000))
(update-transition-buttons! "onboarding"))))
;; define your app data so that it doesn't get over-written on reload
(defonce world
(add-listener-to-recipe-button!))
Run Code Online (Sandbox Code Playgroud)
在update-transition-buttons有步骤(利用超时代码之间的一些延迟在这里),如下所示:
(defn- update-transition-buttons! [recipe-name]
"Updates the buttons with the transition names"
(go
;; Split response in list of actions by splitting on the comma
(let …Run Code Online (Sandbox Code Playgroud) 我无法理解一些人的意图?在Clojure中的功能.
我需要一些函数(内置),它在需要时返回false(nil或false).
这是一个例子:
(some? "1")
=> true
(some? nil)
=> false
(some? false) ;;Which is odd!!
=> true
Run Code Online (Sandbox Code Playgroud) 我想编写函数而不考虑函数声明的顺序,我不想使用declare函数,因为我需要声明我不想做的所有函数名.
我想要一些宏或一些能为我带来魔力的功能.长话短说,我需要写像Java函数(方法声明的顺序并不重要)
我有两个代码片段,我认为这两个代码片段都会产生警报.但是,第一个结果为none,而第二个执行警报.
(map #(.alert js/window %) ["hey1" "hey2"])
Run Code Online (Sandbox Code Playgroud)
这个轻微的修改按预期打印(零nil),以及修复警报问题.问题是为什么?
(print (map #(.alert js/window %) ["hey1" "hey2"]))
Run Code Online (Sandbox Code Playgroud)
另一个奇怪的观察是,第一个代码片段来自浏览器 - repl,但不是在键入代码时.
地图功能副作用是免费的,但打印不是吗?也许我不知道一些核心代码优化?
解决方法和答案都很受欢迎.如果您需要更多信息,请在评论中告诉我.
[org.clojure/clojurescript"1.8.51"]
BOOT_CLOJURE_VERSION = 1.7.0
BOOT_VERSION = 2.5.5
java版"1.8.0_101"
说明:Ubuntu 14.04.4 LTS
我正在尝试启动最新的稳定版[org.clojure/clojurescript "1.9.946"],使用boot-cljs并收到此错误:cljs/core.cljs [line 988, col 14] No reader function for tag Inf.
我已经了解到1.9.946引入了新的##Inf语法:https://cljs.github.io/api/syntax/Inf.但不知道为什么我收到这个错误.我也试过这样做:[adzerk/boot-cljs "2.1.4" :exclusions [org.clojure/clojurescript]]但它没有改变.
编辑:只是尝试从repo构建cljs版本并连接npm deps lein-npm,服务器渲染的反应按预期工作.可能与boot-cljsdeps或其他我的组件有关.
在clojure文档中,smap偶尔会使用该术语.例如,核心/替换:
给定替换对和向量/集合的映射,返回带有任何元素的向量/ seq =用smap中的对应val替换的smap中的键.
术语" smap" 是什么意思?
我有一个嵌套的地图,其结构如下(Clojurescript):
{"6841"
{"primaryTitle" "First name",
"secondaryTitle" "last name"},
"7944"
{"primaryTitle" "Test 2 first name",
"secondaryTitle" "Test 2 last name"}}
Run Code Online (Sandbox Code Playgroud)
然后,我使用嵌套地图内的键对地图进行排序,如下所示:
(defn compare-title [x y]
(compare [(get (second x) "primaryTitle") (get (second x) "secondaryTitle")]
[(get (second y) "primaryTitle") (get (second y) "secondaryTitle")]))
(sort compare-title @loaded-assets)
Run Code Online (Sandbox Code Playgroud)
到目前为止,排序工作正常,但由于排序功能返回的数据结构如下:
["6841"
{"primaryTitle" "First name",
"secondaryTitle" "last name"}],
["7944"
{"primaryTitle" "Test 2 first name",
"secondaryTitle" "Test 2 last name"}]}
Run Code Online (Sandbox Code Playgroud)
我必须使用into {}将地图转换回初始结构:
(into {} (sort compare-title my-map))
Run Code Online (Sandbox Code Playgroud)
但这完全颠倒了按排序进行的排序。我尝试替换 into {}为:
flatten (将其转换为列表)apply hash-map …clojure ×10
clojurescript ×10
core.async ×1
figwheel ×1
function ×1
goroutine ×1
lisp ×1
list ×1
macros ×1
map-function ×1
printing ×1
sorting ×1