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
Clojure 如何键入向量?_Clojure - Fatal编程技术网

Clojure 如何键入向量?

Clojure 如何键入向量?,clojure,Clojure,如何在Clojure函数中键入向量提示 (defn foo [[^clojure.lang.PersistentVector x]] (prn x)) 在这里,我尝试键入提示参数x。但是,如果我传入类似于[:foo:bar]的内容,即使在我期望[:foo:bar]的时候,x的值也只是:foo的值。我做错了什么?由于双括号,您在不知不觉中破坏了向量的结构。把那些拿出来: (defn foo [^clojure.lang.PersistentVector x] (prn

如何在Clojure函数中键入向量提示

 (defn foo
   [[^clojure.lang.PersistentVector x]]  
   (prn x))

在这里,我尝试键入提示参数x。但是,如果我传入类似于
[:foo:bar]
的内容,即使在我期望
[:foo:bar]
的时候,x的值也只是
:foo
的值。我做错了什么?

由于双括号,您在不知不觉中破坏了向量的结构。把那些拿出来:

(defn foo
  [^clojure.lang.PersistentVector x]
  (prn x))

由于双括号,您正在不知不觉地对向量进行分解。把那些拿出来:

(defn foo
  [^clojure.lang.PersistentVector x]
  (prn x))

当我尝试这个方法时,我发现我仍然能够将字符串或数组映射传递到函数中?我很希望出现异常。@Freid001类型的提示只是对编译器的提示,以帮助避免使用反射。它们不会阻止您对
prn
将接受的内容调用
prn
。@Josh使用
:pre
检查是否需要确保在运行时传递数据。如上所述,这些提示纯粹是为了让编译器避免反射。当我尝试这样做时,我发现我仍然能够将字符串或数组映射传递到函数中?我很希望出现异常。@Freid001类型的提示只是对编译器的提示,以帮助避免使用反射。它们不会阻止您对
prn
将接受的内容调用
prn
。@Josh使用
:pre
检查是否需要确保在运行时传递数据。如上所述,提示纯粹是为了编译器避免反射。