Class: Method::Signature
- Inherits:
-
Array
- Object
- Array
- Method::Signature
- Defined in:
- lib/overload.rb
Instance Method Summary collapse
- #<(sig) ⇒ Object
- #<=>(sig) ⇒ Object
- #===(args) ⇒ Object
- #>(sig) ⇒ Object
- #arity ⇒ Object
- #dispatch(*types, &block) ⇒ Object
- #inspect ⇒ Object
- #invalid(func = nil) ⇒ Object
- #nomatch(recv, func, level = 1) ⇒ Object
- #to_s ⇒ Object
- #to_str ⇒ Object
- #varargs? ⇒ Boolean
Instance Method Details
#<(sig) ⇒ Object
112 113 114 |
# File 'lib/overload.rb', line 112 def <(sig) sig > self end |
#<=>(sig) ⇒ Object
116 117 118 119 120 121 122 123 124 |
# File 'lib/overload.rb', line 116 def <=>(sig) if self > sig 1 elsif sig > self -1 else 0 end end |
#===(args) ⇒ Object
78 79 80 81 82 83 84 85 86 87 88 |
# File 'lib/overload.rb', line 78 def ===(args) if varargs? (l = length-1) <= args.length or return false else (l = length) == args.length or return false end l.times {|i| self[i] === args[i] or return false} true rescue StandardError false end |
#>(sig) ⇒ Object
90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 |
# File 'lib/overload.rb', line 90 def >(sig) v1, l1 = varargs?, length v2, l2 = sig.varargs?, sig.length l1 -= 1 if v1 l2 -= 1 if v2 begin [l1, l2].min.times do |i| return false if sig[i] > self[i] end rescue TypeError return false end if v1 return false if l1 > l2 elsif v2 return false else return false unless l1 == l2 end true end |
#arity ⇒ Object
55 56 57 |
# File 'lib/overload.rb', line 55 def arity varargs? ? -length : length end |
#dispatch(*types, &block) ⇒ Object
126 127 128 |
# File 'lib/overload.rb', line 126 def dispatch(*types, &block) throw :dispatched, yield(*self) if self.class[*types] === self end |
#inspect ⇒ Object
67 68 69 |
# File 'lib/overload.rb', line 67 def inspect self.class.name+self end |
#invalid(func = nil) ⇒ Object
41 42 43 44 45 |
# File 'lib/overload.rb', line 41 def invalid(func = nil) msg = "Invalid signature: " msg << func.to_s if func TypeError.new(msg << to_s) end |
#nomatch(recv, func, level = 1) ⇒ Object
47 48 49 |
# File 'lib/overload.rb', line 47 def nomatch(recv, func, level = 1) raise NoMethodError, "no method match to `#{func}#{self}' for #{recv.class}", caller(level) end |
#to_s ⇒ Object
71 72 73 74 75 76 |
# File 'lib/overload.rb', line 71 def to_s sig = to_str sig[0] = ?( sig[-1] = ?) sig end |
#to_str ⇒ Object
59 60 61 62 63 64 65 |
# File 'lib/overload.rb', line 59 def to_str sig = Array[*self] sig.pop if v = varargs? sig = sig.inspect sig[-1, 0] = ', ...' if v sig end |
#varargs? ⇒ Boolean
51 52 53 |
# File 'lib/overload.rb', line 51 def varargs? !(empty? or last) end |