加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

在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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读