Actions
Feature #7121
openExtending the use of `require'
Description
I was playing with Ruby tonight and thought up an interesting idea to make (({require})) a bit better, so you can load multiple files sequentially using one method call.
Currently, (({require})) supports one argument, and throws a (({TypeError})) if you pass an array:
irb(main):001:0> require %w(json yaml)
TypeError: can't convert Array into String
However, there's a way to patch Kernel that makes it respond to multiple objects passed in an (({Array})).
module Kernel
@@require = method :require
def require *args
args.flatten!
args.collect! do |a|
raise ArgumentError.new "arguments to `require' must be strings or symbols" unless a.is_a?(String) || a.is_a?(Symbol)
@@require.call a.to_s
end
args.length == 1 ? args.first : args
end
end
The new behavior doesn't actually require the modification of any code that calls (({require})) (pretty much anything, really), and new code can take advantage of the new functionality instantly.
irb> require %w(json yaml)
=> [true, false]
irb> require :pp
=> false
irb> require 'rails'
=> true
irb> require %w(json yaml), :pp, 'rails'
=> [true, false, false, true]
Thanks for considering this.
Actions
Like0
Like0Like0Like0Like0Like0Like0Like0Like0