Clojure

'get' should throw exception on non-Associative argument

Details

  • Type: Enhancement Enhancement
  • Status: Open Open
  • Priority: Minor Minor
  • Resolution: Unresolved
  • Affects Version/s: None
  • Fix Version/s: None
  • Component/s: None
  • Labels:
    None
  • Patch:
    Code and Test

Description

The implementation of clojure.core/get returns null if its argument is not a valid associative collection. However, calling 'get' on something which is neither nil nor an Associative collection is almost certainly a bug, and should be indicated by an exception.

This behavior can obscure common programmer errors such as:

(def a (atom {:a 1 :b 2})

(:foo a)   ; forgot to deref a
;;=> nil

CLJ-932 was accepted as a similar enhancement to 'clojure.core/contains?'

Attached patch 0001 throws an IllegalArgumentException as the fall-through case of RT.getFrom.

Activity

Stuart Sierra made changes -
Field Original Value New Value
Patch Code and Test [ 10002 ]
Description The implementation of clojure.core/get returns null if its argument is not a valid associative collection. However, calling 'get' on something which is neither nil nor an Associative collection is almost certainly a programmer error, and should be indicated by an exception.

CLJ-932 was accepted as a similar enhancement to 'clojure.core/contains?'
The implementation of clojure.core/get returns null if its argument is not a valid associative collection. However, calling 'get' on something which is neither nil nor an Associative collection is almost certainly a bug, and should be indicated by an exception.

This behavior can obscure common programmer errors such as:

{code}
(def a (atom {:a 1 :b 2})

(:foo a) ; forgot to deref a
;;=> nil
{code}

CLJ-932 was accepted as a similar enhancement to 'clojure.core/contains?'

Attached patch 0001 throws an IllegalArgumentException as the fall-through case of RT.getFrom.
Attachment 0001-CLJ-1107-Throw-exception-for-get-called-on-unsupport.patch [ 11672 ]
Andy Fingerhut made changes -

People

Vote (1)
Watch (0)

Dates

  • Created:
    Updated: