wro*_*ame 31 functional-programming clojure
我本来可以发誓我曾经alength工作过,但我现在还不太清楚我做错了什么:
user=> (alength '(1 2 3))
IllegalArgumentException No matching method found: alength clojure.lang.Reflector.invokeMatchingMethod (Reflector.java:79)
user=> (alength [1 2 3])
IllegalArgumentException No matching method found: alength clojure.lang.Reflector.invokeMatchingMethod (Reflector.java:79)
user=> (doc alength)
-------------------------
clojure.core/alength
([array])
Returns the length of the Java array. Works on arrays of all
types.
nil
Run Code Online (Sandbox Code Playgroud)
我应该怎么做才能在Clojure中获取列表/数组的长度?
Ósc*_*pez 49
尝试使用count:
(count '(1 2 3))
=> 3
(count [1 2 3])
=> 3
Run Code Online (Sandbox Code Playgroud)
sku*_*uro 36
正如文档字符串所说,alength适用于Java™数组,例如a String[]或Integer[],它绝对是您想要使用的Clojure列表或向量的不兼容类型count:
user=> (def x '(1 2 3))
#'user/x
user=> (def xa (to-array x))
#'user/xa
user=> (class x)
clojure.lang.PersistentList
user=> (class xa)
[Ljava.lang.Object;
user=> (alength xa)
3
user=> (alength x)
java.lang.IllegalArgumentException: No matching method found: alength (NO_SOURCE_FILE:0)
user=> (count x)
3
Run Code Online (Sandbox Code Playgroud)
[Ljava.lang.Object;是不可思议的方式toString被定义为输出原生Object阵列.