如果没有对File.open
进行两次单独调用,并且没有查看File.open
permissions
的默认值,则必须采用干扰方式执行此操作。正确?
def ensure_file(path, contents, permissions=nil)
if permissions.nil?
File.open(path, 'w') do |f|
f.puts(contents)
end
else
File.open(path, 'w', permissions) do |f|
f.puts(contents)
end
end
end
答案 0 :(得分:4)
使用splat(即*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
。
答案 1 :(得分:1)
File.open(path, 'w') do |f|
f.puts(contents)
f.chmod(permission) if permission
end