oop/initialize/default_arity.rb
tests/_examples/oop/initialize/default_arity.rb in the metorex repository.
# The default `initialize` takes no arguments, so handing `new` any is an
# ArgumentError rather than a silent no-op.
class Plain
end
plain = Plain.new
puts plain.class.to_s
begin
Plain.new(1, 2)
rescue ArgumentError => error
puts error.message
end
begin
BasicObject.new("extra")
rescue ArgumentError => error
puts error.message
end
puts BasicObject.private_instance_methods(false).include?(:initialize).to_s
class Accepting
def initialize(first, second = 2)
@pair = [first, second]
end
attr_reader :pair
end
puts Accepting.new(1).pair.inspect
puts Accepting.new(1, 9).pair.inspect
begin
Accepting.new
rescue ArgumentError => error
puts error.message
end
class Variadic
def initialize(first, *rest)
@all = [first, *rest]
end
attr_reader :all
end
puts Variadic.new(1, 2, 3).all.inspect
begin
Variadic.new
rescue ArgumentError => error
puts error.message
end
adder = lambda { |first, second| first + second }
begin
adder.call 1
rescue ArgumentError => error
puts error.message
end
optional = lambda { |first, second = 2| [first, second] }
begin
optional.call 1, 2, 3
rescue ArgumentError => error
puts error.message
end
Output:
Plain
wrong number of arguments (given 2, expected 0)
wrong number of arguments (given 1, expected 0)
true
[1, 2]
[1, 9]
wrong number of arguments (given 0, expected 1..2)
[1, 2, 3]
wrong number of arguments (given 0, expected 1+)
wrong number of arguments (given 1, expected 2)
wrong number of arguments (given 3, expected 1..2)