@@ -1119,17 +1119,25 @@ function show_nd(io::IO, a::AbstractArray, limit, print_matrix, label_slices)
1119
1119
cartesianmap (print_slice, tail)
1120
1120
end
1121
1121
1122
- function whos (m:: Module , pattern:: Regex )
1123
- for v in sort (names (m))
1124
- s = string (v)
1125
- if isdefined (m,v) && ismatch (pattern, s)
1126
- println (rpad (s, 30 ), summary (eval (m,v)))
1122
+ function whos (m:: Module , pattern:: Regex ; filter= [])
1123
+ filtertypes = applicable (start, filter) ?
1124
+ filter : [filter]
1125
+ for ft in filtertypes
1126
+ isa (ft, DataType) ||
1127
+ throw (ArgumentError (" Non-type object given to filter keyword" ))
1128
+ end
1129
+ filtertest (var) = ! any (T -> typeof (var) <: T , filtertypes)
1130
+ for n in sort (names (m))
1131
+ s = string (n)
1132
+ v = eval (m,n)
1133
+ if isdefined (m,n) && ismatch (pattern, s) && filtertest (v)
1134
+ println (rpad (s, 30 ), summary (v))
1127
1135
end
1128
1136
end
1129
1137
end
1130
- whos () = whos (r" " )
1131
- whos (m:: Module ) = whos (m, r" " )
1132
- whos (pat:: Regex ) = whos (current_module (), pat)
1138
+ whos (;filter = Module ) = whos (r" " ; filter = filter )
1139
+ whos (m:: Module ; filter = [] ) = whos (m, r" " ; filter = filter )
1140
+ whos (pat:: Regex ; filter = Module ) = whos (current_module (), pat; filter = filter )
1133
1141
1134
1142
# global flag for limiting output
1135
1143
# TODO : this should be replaced with a better mechanism. currently it is only
0 commit comments