【问题标题】:Optional method arguments可选方法参数
【发布时间】:2019-03-08 18:30:24
【问题描述】:

我有两种方法几乎做同样的事情,但在传递参数方面略有不同:

def generate_file(filename)
  draw
  FileUtils.mkdir_p 'tmp/pdf'
  @pdf.render_file "#{Rails.root}/tmp/pdf/#{filename}"
end

def generate_pdf(report, version)
  draw
  path = "tmp/pdf/reports/#{report.reference}"
  FileUtils.mkdir_p(path)
  @pdf.render_file "#{Rails.root}/#{path}/#{version}"
end

我想重构它,并在调用生成 pdf 文件的函数时仅使用 generate_file 方法。我应该传递一个可选的params (version = nil) 并测试它是否已定义?

像这样:

def generate_file(filname, version = nil, report = nil) 
  draw
  if report && version
    path = "tmp/pdf/reports/#{report.reference}"
    FileUtils.mkdir_p(path)
    @pdf.render_file "#{Rails.root}/#{path}/#{version}"
  else
    FileUtils.mkdir_p 'tmp/pdf'
    @pdf.render_file "#{Rails.root}/tmp/pdf/#{filename}"
  end
end

【问题讨论】:

  • 用英文书写时请使用英文标点符号,而不是法文标点符号。请与代码中的间距保持一致。

标签: ruby-on-rails ruby methods parameters arguments


【解决方案1】:

您在提议的代码中似乎有一些拼写错误(filname 而不是filename)和语法错误(例如if..end..else..end)。更像的东西怎么样:

def generate_file(filename, version=nil, report=nil) 
  draw
  report_version = report && version
  path = report_version ? "tmp/pdf/reports/#{report.reference}" : "temp/pdf"
  FileUtils.mkdir_p( path )
  @pdf.render_file "#{ Rails.root }/#{path}/#{ report_version ? version : filename }"
end

【讨论】:

    猜你喜欢
    • 2012-06-19
    • 2015-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多