Ruby 2.0.0 - использование именованых аргументов (keyword arguments).
# Ruby 1.9:
# (From action_view/helpers/text_helper.rb)
def cycle(first_value, *values)
options = values.extract_options!
name = options.fetch(:name, 'default')
# ...
end
# Ruby 2.0:
def cycle(first_value, *values, name: 'default')
# ...
end
# CAUTION: Not exactly identical, as keywords are enforced:
cycle('odd', 'even', nme: 'foo')
# => ArgumentError: unknown keyword: nme
# To get exact same result:
def cycle(first_value, *values, name: 'default', **ignore_options)
# ...
end
Known bug: невозможно игнорировать дополнительные параметры без определения ** аргумента (указания его имени). Ошибка исправлена, но в ruby2.0.0-p0 пока без изменений. В релизе ruby2.0.0-p195 все уже работает как надо.
def wrap(string, before: "<", after: ">")
# no need to retrieve options from a hash
"#{before}#{string}#{after}"
end
# optional
p wrap("foo") #=> "<foo>"
# one or the other
p wrap("foo", before: "#<") #=> "#<foo>"
p wrap("foo", after: "]") #=> "<foo]"
# order not important
p wrap("foo", after: "]", before: "[") #=> "[foo]"
# double splat to capture all keyword arguments,
# or use as hash as keyword arguments
def capture(**opts)
opts
end
p capture(foo: "bar") #=> {:foo=>"bar"}
# keys must be symbols
opts = {:before => "(", :after => ")"}
p wrap("foo", opts) #=> "(foo)"
# the old hash style syantax is still accepted for keyword arguments
p wrap("foo", :before => "{", :after => "}") #=> "{foo}"
Ruby 2.0.0 - использование именованых аргументов (keyword arguments).
Known bug: невозможно игнорировать дополнительные параметры без определения ** аргумента (указания его имени). Ошибка исправлена, но в ruby2.0.0-p0 пока без изменений. В релизе ruby2.0.0-p195 все уже работает как надо.
Мои собственные тесты: