Method Arguments
Double Splat
The double splat operator gathers keyword options into a hash.
double splat
`**options` captures keyword arguments that were not listed separately.
Double Splat
double_splat.rb
Replay: real traced execution (multi-file project)
def describe_user(name, **options)
role = options[:role] || "guest"
format = options[:format] || "short"
"#{name}:#{role}:#{format}"
end
format = "short"
description = describe_user("Ada", role: "admin", format: format)
puts "format=#{format}"
puts "description=#{description}"
def describe_user(name, **options)
role = options[:role] || "guest"
format = options[:format] || "short"
"#{name}:#{role}:#{format}"
end
format = "long"
description = describe_user("Ada", role: "admin", format: format)
puts "format=#{format}"
puts "description=#{description}"
def describe_user(name, **options)
role = options[:role] || "guest"
format = options[:format] || "short"
"#{name}:#{role}:#{format}"
end
format = "badge"
description = describe_user("Ada", role: "admin", format: format)
puts "format=#{format}"
puts "description=#{description}"
format ← short
7format→ short = "short" #@format="long", "badge"8description = describe_user("Ada", role: "admin", format: formatshort)role ← admin, format ← short
1def describe_user(nameAda, **options{:role=>"admin", :format=>"short"})2 role→ admin = options[:role]admin || "guest"3 format→ short = options[:format]short || "short"4 "#{nameAda}:#{roleadmin}:#{formatshort}"5enddescription ← Ada:admin:short
7format = "short" #@format="long", "badge"8description→ Ada:admin:short = describe_user("Ada", role: "admin", format: formatshort)910puts "format=#{formatshort}"11puts "description=#{descriptionAda:admin:short}"outputformat=short description=Ada:admin:short
format ← long
7format→ long = "long"8description = describe_user("Ada", role: "admin", format: formatlong)role ← admin, format ← long
1def describe_user(nameAda, **options{:role=>"admin", :format=>"long"})2 role→ admin = options[:role]admin || "guest"3 format→ long = options[:format]long || "short"4 "#{nameAda}:#{roleadmin}:#{formatlong}"5enddescription ← Ada:admin:long
7format = "long"8description→ Ada:admin:long = describe_user("Ada", role: "admin", format: formatlong)910puts "format=#{formatlong}"11puts "description=#{descriptionAda:admin:long}"outputformat=long description=Ada:admin:long
format ← badge
7format→ badge = "badge"8description = describe_user("Ada", role: "admin", format: formatbadge)role ← admin, format ← badge
1def describe_user(nameAda, **options{:role=>"admin", :format=>"badge"})2 role→ admin = options[:role]admin || "guest"3 format→ badge = options[:format]badge || "short"4 "#{nameAda}:#{roleadmin}:#{formatbadge}"5enddescription ← Ada:admin:badge
7format = "badge"8description→ Ada:admin:badge = describe_user("Ada", role: "admin", format: formatbadge)910puts "format=#{formatbadge}"11puts "description=#{descriptionAda:admin:badge}"outputformat=badge description=Ada:admin:badge