gist: 1960 Download_button fork
public
Public Clone URL: git://gist.github.com/1960.git
Text only
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
// do as self.isany()
 
self.isa = function(/* args */) {
  
  if (arguments.length > 0) {
 
    // Prepare arguments and constructors
    var args = Array.prototype.slice.call(arguments), // args provide an .isany() feature; could do in sep method
        makers = [] //: list
 
    for (var i in args) makers.push(args[i].constructor)
  }
  else var makers = [[]]
 
  // Handle short-hand names for types
  var types = []
  for (var it in makers) {
   types[it] = ( makers[it] === Number ? "num" :
   ( makers[it] === String ? "chars" :
   ( makers[it] === Array ? "list" :
   ( makers[it] === Object ? "hash" : "unknown" ) ) ) )
  
  }
 
  // Handle not getting args
  if (makers.length === 1) { return no(args) ? makers[0] : types[0] === makers[0] }
  var done = []
  for (var its in types) {
    if (self[its].isa(types[its])) done.push(true)
    else done.push(false)
  }
  return done
 
}
 
 
self.isa = function(types) { // doesn't want hashes
  // self is a type in types?
  var makers = []
  if (types.constructor === Number || types.constructor === String)
    types = [self]
  for (var i in types)
    makers.push(args[i].constructor)
  
  // Handle short-hand names for types
  var types = []
  for (var i in makers) {
   types[it] = ( makers[it] === Number ? "num" :
   ( makers[it] === String ? "chars" :
   ( makers[it] === Array ? "list" :
   ( makers[it] === Object ? "hash" : "unknown" ))))
  }
 
  // Handle not getting args
  if (makers.length === 1) { return no(args) ? makers[0] : types[0] === makers[0] }
  var done = []
  for (var it in types) {
    if ( self[it].constructor === makers[it] ) done.push( true )
    else done.push( false )
  }
  return done
 
}

Owner

maxwell

Revisions