Class refinements: per-type class names, FQN tokens, instance? built-ins
- (class x) returns per-type JVM class names (Long/Double/Ratio/Character/Atom), not a blanket java.lang.Number. - register fully-qualified class tokens (java.lang.Long, clojure.lang.Keyword, clojure.lang.Atom, ...) that self-evaluate to their name, so (= (class 1) java.lang.Long) and (instance? clojure.lang.Atom x) resolve. - instance? recognizes Long/Double/Ratio/Character/Symbol/Atom/IFn built-ins. Closes class number/string/keyword/name, instance? Atom, atom?. Corpus 2699->2705.
This commit is contained in:
parent
b03da19ba8
commit
bb6c9eeb29
4 changed files with 36 additions and 7 deletions
|
|
@ -15,15 +15,15 @@
|
|||
{:suite "class" :expr "File" :expected "java.io.File"}
|
||||
{:suite "class" :expr "Exception" :expected "java.lang.Exception"}
|
||||
{:suite "class" :expr "MapEntry" :expected "clojure.lang.MapEntry"}
|
||||
{:suite "class" :expr "(class 1)" :expected "java.lang.Number"}
|
||||
{:suite "class" :expr "(class 1.5)" :expected "java.lang.Number"}
|
||||
{:suite "class" :expr "(class 1)" :expected "java.lang.Long"}
|
||||
{:suite "class" :expr "(class 1.5)" :expected "java.lang.Double"}
|
||||
{:suite "class" :expr "(class \"s\")" :expected "java.lang.String"}
|
||||
{:suite "class" :expr "(class :k)" :expected "clojure.lang.Keyword"}
|
||||
{:suite "class" :expr "(class true)" :expected "java.lang.Boolean"}
|
||||
{:suite "class" :expr "(class false)" :expected "java.lang.Boolean"}
|
||||
{:suite "class" :expr "(class nil)" :expected ""}
|
||||
{:suite "class" :expr "(= String (class \"abc\"))" :expected "true"}
|
||||
{:suite "class" :expr "(= Number (class 7))" :expected "true"}
|
||||
{:suite "class" :expr "(= Number (class 7))" :expected "false"}
|
||||
{:suite "class" :expr "(= String (class 7))" :expected "false"}
|
||||
{:suite "class" :expr "(do (defmulti cm (fn [x] (class x))) (defmethod cm String [x] :str) (cm \"a\"))" :expected ":str"}
|
||||
{:suite "class" :expr "(do (defmulti cn (fn [x] (class x))) (defmethod cn nil [x] :nil) (defmethod cn String [x] :str) (cn nil))" :expected ":nil"}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue