methods/call_arguments_no_parens.rb
tests/_examples/methods/call_arguments_no_parens.rb in the metorex repository.
# How a call hands over its arguments: a splat asks for `to_a`, keywords
# keep keys that are not Symbols and the order they were written in, `**nil`
# refuses keywords, and a space before the parentheses makes them one
# argument.
# Written with as few parentheses as Ruby allows.
def gather(*values)
values
end
class Refuses
def to_a
1
end
end
begin
gather(*Refuses.new)
rescue TypeError => error
p error.message
end
class Declines
def to_a
nil
end
end
p gather(*Declines.new).first.class
def options(**given)
given
end
p options("name" => 1, size: 2)
p options(**{a: 1, b: 2}, **{a: 4, c: 7})
def required_and_rest(a:, **rest)
[a, rest]
end
p required_and_rest("a" => 1, a: 1, b: 2)
def takes_no_keywords(value, **nil)
value
end
p takes_no_keywords({a: 1})
begin
takes_no_keywords(a: 1)
rescue ArgumentError => error
p error.message
end
p gather ()
p gather ((0; 1)), ((2; 3))
begin
eval "gather (1, 2)"
rescue SyntaxError
p SyntaxError
end
def pair(first:, second:)
[first, second]
end
first = 1
second = 2
p pair first:, second:
Output:
"can't convert Refuses to Array (Refuses#to_a gives Integer)"
Declines
{"name" => 1, size: 2}
{a: 4, b: 2, c: 7}
[1, {"a" => 1, b: 2}]
{a: 1}
"no keywords accepted"
[nil]
[1, 3]
SyntaxError
[1, 2]