Использование восклицательного знака (то есть *some_array
) будет работать в общем случае:
def ensure_file(path, contents, permissions=nil)
# Build you array:
extra_args = []
extra_args << permissions if permissions
# Use it:
File.open(path, 'w', *extra_args) do |f|
f.puts(contents)
end
end
В этом случае вы уже получаете permissions
в качестве параметра, так что вы можете упростить это (исделать его еще более общим), разрешив любое количество необязательных аргументов и передав их:
def ensure_file(path, contents, *extra_args)
File.open(path, 'w', *extra_args) do |f|
f.puts(contents)
end
end
Единственное отличие состоит в том, что если передано слишком много аргументов, ArgumentError
будет вызвано при вызове File.open
вместо вашего ensure_file
.