Character/isWhitespace 的正确用法包括:
(Character/isWhitespace \a) => false
(Character/isWhitespace \ ) => true
但是,我的第一次尝试是这样,我发现错误令人困惑。
(Character/isWhitespace "")
=> IllegalArgumentException No matching method found: isWhitespace
=> clojure.lang.Reflector.invokeMatchingMethod (Reflector.java:80)
这IllegalArgument
部分是有道理的,但为什么它说“找不到匹配的方法”?显然该功能确实存在。
澄清
我问这个问题的原因是我是 Clojure 的新手,并且认为我从根本上误解了一些东西。
当我输入(Character/isWhitespace \a)
时,我想我想说的是:“我知道有一个Character
命名空间,其中有一个名为 的函数isWhitespace
,我想调用该函数并传入\a
”。
在这个心智模型上,我上面的结果令人困惑,因为 Clojure 似乎在说,“只要你给我一个这个函数不接受的参数类型,我就会假装这个函数不存在。” 例如,“你不能混合砖块,所以如果你尝试,我会给你一个 BlenderDoesntExist 错误。” 这很奇怪。
有些答案似乎暗示
- 名称
Character/isWhitespace
只是Clojure 用于查找函数的一部分,另一部分是参数的类型。(我做了更多的搜索:这可能是一种多方法吗?) - 正在查找 Java 类的方法?
一个很好的答案将为我澄清这个过程。