Skip to content

Instantly share code, notes, and snippets.

@maxterry
Created July 24, 2008 00:35
Show Gist options
  • Select an option

  • Save maxterry/1960 to your computer and use it in GitHub Desktop.

Select an option

Save maxterry/1960 to your computer and use it in GitHub Desktop.
// 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
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment