在Clojure中,我可以定义一系列函数,然后将它们称为任何其他值,如下所示:
(doseq [op [+ - * /]]
(println (op 1 2 3 4)))
Run Code Online (Sandbox Code Playgroud)
产生以下输出:
10
-8
24
1/24
nil
Run Code Online (Sandbox Code Playgroud)
尝试在Common Lisp中执行相同操作只会导致错误:
(dolist (op '(+ - * /))
(print (op 1 2 3 4))
; in: DOLIST (OP '(+ - * /))
; (LET ((OP (TRULY-THE (MEMBER / * - +) (CAR #:N-LIST671))))
; (SETQ #:N-LIST671 (CDR #:N-LIST671))
; (TAGBODY (PRINT (OP 1 2 3 4))))
;
; caught STYLE-WARNING:
; The variable OP is defined but never used.
; in: …
Run Code Online (Sandbox Code Playgroud) 我正在寻找一个简单的解决方案来解析上传到我的应用程序的每个文件,并转换为简单的文本.我的Web应用程序在Clojure上运行,并且更喜欢API来解析各种文件类型.
我想创建一个 html 元素列表(其中包括查询结果),默认情况下这些元素是隐藏的,但用户可以切换该状态。我在下面尝试了几种不同的方法作为玩具示例,但都无法工作。
此代码正确创建了三个按钮,它们正确地更改了 exps 状态,但不会隐藏内容。
(:require [reagent.core :as r] )
(def exps (r/atom [true true true]))
(defn like-component []
[:div
(for [ [i r] (map-indexed vector ["A" "B" "C"])]
[:div
[:button {:on-click #(swap! exps update-in [i] not)}]
(when (nth @exps i)
[:pre (str i r)])])])
(r/render [like-component]
(js/document.getElementById "app"))
Run Code Online (Sandbox Code Playgroud)
另一方面,下面的代码将仅创建一个元素,但它可以正常工作。
(defn expandable-view [e bool]
(let [expanded (r/atom bool)]
(fn []
[:li
[:div.expandable
[:div.header {:on-click #(swap! expanded not)}
"Click me to expand and collapse"]
(if @expanded
[:div.body (allow-html :pre e)])]]))) …
Run Code Online (Sandbox Code Playgroud) 假设我有以下HTML文档元素并且加载了DOM:
<ul id='myUnorderedList' />
Run Code Online (Sandbox Code Playgroud)
当我在Clojure中运行以下代码时
(def my-element (.getElementById js/document 'myUnorderedList'))
Run Code Online (Sandbox Code Playgroud)
价值my-element
是nil
.
但这有效:
(def my-element (.getElementById js/document "myUnorderedList"))
Run Code Online (Sandbox Code Playgroud)
即my-element
具有值#object[HTMLUListElement [object HTMLUListElement]]
.
(def my-element (.getElementById js/document "myUnorderedList"))
Run Code Online (Sandbox Code Playgroud)
我的问题是:ClojureScript中单引号标识符和双引号之间有什么区别?
我正在尝试找到一种更简洁的方法来更新 Scala 中的嵌套不可变结构。我想我正在寻找类似于assoc-in
Clojure 的东西。我不确定其中有多少类型因素。
例如,在 Clojure 中,要更新嵌套地图的“city”属性,我会执行以下操作:
> (def person {:name "john", :dob "1990-01-01", :home-address {:city "norfolk", :state "VA"}})
#'user/person
> (assoc-in person [:home-address :city] "richmond")
{:name "john", :dob "1990-01-01", :home-address {:state "VA", :city "richmond"}}
Run Code Online (Sandbox Code Playgroud)
我在 Scala 中有哪些选择?
val person = Map("name" -> "john", "dob" -> "1990-01-01",
"home-address" -> Map("city" -> "norfolk", "state" -> "VA"))
Run Code Online (Sandbox Code Playgroud) 我是 Erlang 新手,试图找出函数调用的默认值的最佳方法,这需要多个变量和/或也不想按特定顺序输入参数。我目前正在使用这种基于 Clojure 方式的松散格式。在Erlang中是否有更好的方式或方法来实现这一点?我还提供了一个 Clojure 示例作为参考:
二郎版本:
some_function_with_defaults() ->
some_function_with_defaults(#{}).
some_function_with_defaults(Map) ->
Defaults = #{
arg1 => 0, % arg1 default value
arg2 => 1, % arg2 default value
arg3 => 2 % arg3 default value
},
Arguments = maps:merge(Defaults,Map),
#{arg1 := Arg1} = Arguments,
#{arg2 := Arg2} = Arguments,
#{arg3 := Arg3} = Arguments,
%% Do something with arguments
[Arg1,Arg2,Arg3].
%% Example call using only defaults
%% some_function_with_defaults().
%%
%% [0,1,2]
%% Example call specifying a specific value …
Run Code Online (Sandbox Code Playgroud) 我正在阅读有关Clojure的文章,并在当前版本中发现了关于Java不支持尾调用的讨论,并且人们在JVM中抛出异常模拟尾部调用,无论如何,听起来人们正在做一些疯狂的东西.所以这让我想知道C#的尾部调用,同样的问题?
在Javascript中,如果我想存储配置,我使用Json.在Clojure中,我使用EDN,Haskell中推荐什么?YAML?
制作地图或记录规范的方式是否比官方规范指南中的方式更简洁?
(defrecord Person [first-name last-name email phone])
(s/def ::first-name string?)
(s/def ::last-name string?)
(s/def ::email ::email-type)
(s/def ::person (s/keys :req-un [::first-name ::last-name ::email]
:opt-un [::phone]))
Run Code Online (Sandbox Code Playgroud)
理想情况下,如果我能写出像这样的东西会很好
(defrecord Person [first-name last-name email phone])
(s/def ::person (s/keys :req-un [:first-name string?
:last-name string?
:email ::email-type]
:opt-un [:phone]))
Run Code Online (Sandbox Code Playgroud) 我有两个程序:一个CLI程序和一个GUI.GUI是CLI的前端,也是另一个程序的GUI.
我正在导入CLI的类并在GUI中扩展它们以向类添加GUI元素,一切都很棒.
但现在我想拆分我目前嵌入GUI的CLI(作为一个包含的JAR).JAR位于一个固定的位置(/opt/program/prog.jar),该应用程序只能在Linux上使用,因此我意识到这打破了传统的Java思想.
我已经在Manifest文件中编辑了ClassPath以反映这一变化,并且它工作正常.但是,当我删除该文件时,GUI无法加载,因为无法加载该类.
有没有办法尝试加载一个类,如果它不起作用,那么做一些其他的?本质上,我试图捕获ClassNotFound异常,但还没有运气.
在clojure苹果酒中repl
,当一些代码出错时,我必须C-b k
杀死苹果酒错误缓冲区,C-x o
切换回repl缓冲区.是否有repl
直接跳回缓冲区的快捷方式/功能?
clojure ×10
java ×2
c# ×1
cider ×1
class ×1
classloader ×1
clojure.spec ×1
common-lisp ×1
dom ×1
dynamic ×1
element ×1
erlang ×1
file-upload ×1
function ×1
haskell ×1
hiccup ×1
immutability ×1
lisp-2 ×1
reagent ×1
scala ×1
string ×1
tail-call ×1