在Ruby中将可选参数从父级传递给子级
发布时间:2020-12-17 02:34:49 所属栏目:百科 来源:网络整理
导读:如果没有对File.open的两次单独调用,并且没有查看File.open的权限默认值,则必须有一种DRY方式来执行此操作.对? def ensure_file(path,contents,permissions=nil) if permissions.nil? File.open(path,'w') do |f| f.puts(contents) end else File.open(path
如果没有对File.open的两次单独调用,并且没有查看File.open的权限默认值,则必须有一种DRY方式来执行此操作.对?
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 解决方法
使用splat(即* some_array)将适用于一般情况:
def ensure_file(path,permissions=nil) # Build you array: extra_args = [] extra_args << permissions if permissions # Use it: File.open(path,*extra_args) do |f| f.puts(contents) end end 在这种情况下,您已经获得了作为参数的权限,因此您可以通过允许任意数量的可选参数并传递它们来简化此操作(并使其更加通用): def ensure_file(path,*extra_args) File.open(path,*extra_args) do |f| f.puts(contents) end end 唯一的区别是,如果传递的参数太多,则在调用File.open而不是ensure_file时将引发ArgumentError. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |