Simulate Overloading Method
require "set"
require "./dio.rb"
class B
end
class A < B
end
class D
end
class C < D
end
class M
sig
def fun()
p []
end
sig Integer
def fun(p1)
p [p1]
end
sig Integer, Integer
def fun(p1, p2)
p [p1, p2]
end
sig Integer, Integer, Integer
def fun(p1, p2, p3)
p "Integer# #{[p1, p2, p3].inspect}"
end
sig String, String, String, String
def fun(p1, p2, p3, p4)
p "String# #{[p1, p2, p3, p4].inspect}"
end
sig Array, Array, Array
def fun(p1, p2, p3)
p "Array# #{[p1, p2, p3].inspect}"
end
sig Hash, Hash
def fun(p1, p2)
fun(p1, p2, {})
end
sig Hash, Hash, Hash
def fun(p1, p2, p3)
p "Hash# #{[p1, p2, p3].inspect}"
end
sig Set, Set, Set
def fun(p1, p2, p3)
p "Set# #{[p1, p2, p3].inspect}"
end
sig A, D
def test(a, d)
p "A & D"
end
sig B, C
def test(b, c)
p "B & C"
end
end
M.new.fun()
M.new.fun(1)
M.new.fun(1, 2)
M.new.fun(1, 2, 3)
M.new.fun("A", "B", "C", "D")
M.new.fun({}, {})
M.new.fun(Set.new, Set.new, Set.new)
M.new.test(A.new, C.new)
puts M.new.overloading_methods("fun8")
INFO