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 が「この関数が受け入れない引数の型を指定すると、関数が存在しないふりをする」と言っているように見えるため、上記の結果はわかりにくいものです。たとえば、「ブロックをブレンドすることは許可されていません。試してみると、Blender DoesntExist エラーが発生します。」これは奇妙です。
いくつかの答えはそれを暗示しているようです
- 名前は、Clojure が関数を検索するために使用するものの一部
Character/isWhitespace
にすぎず、他の部分は引数の型です。(さらに検索を行いました。これはおそらくマルチメソッドですか?) - メソッドが Java クラスで検索されていますか?
素晴らしい答えは、私にとってこのプロセスを明確にするでしょう。