在构建数组之前检查变量是否存在

时间:2015-03-22 16:42:00

标签: ruby-on-rails ruby arrays

我正在从许多组件(标题,作者,期刊,年份,期刊卷,期刊页面)生成一个字符串。这个想法是字符串将是一个引用:

@citation = article_title + " " + authors + ". " + journal + " " + year + ";" + journal_volume + ":" + journal_pages 

我猜有些组件偶尔不存在。我收到了这个错误:

no implicit conversion of nil into String

这是否表明它正在尝试构建字符串,其中一个组件是nil?如果是这样,有没有一种巧妙的方法来从数组构建一个字符串,同时检查每个元素是否存在以避免这个问题?

3 个答案:

答案 0 :(得分:4)

使用插值更容易

@citation = "#{article_title} #{authors}. #{journal} #{year}; #{journal_volume}:#{journal_pages}"

Nils将被替换为空字符串

答案 1 :(得分:1)

array  = [
           article_title, authors ,journal, 
           year, journal_volume, journal_pages
         ]

@citation = "%s %s. %s %s; %s:%s" % array

使用String#%格式字符串方法。

<强>演示

>> "%s: %s" % [ 'fo', nil ]
=> "fo: "

答案 2 :(得分:0)

考虑到你可能在多篇文章中这样做,你可能会考虑这样做:

SEPARATORS = [" ", ". ", " ", ";", ":", ""]
article = ["Ruby for Fun and Profit", "Matz", "Cool Tools for Coders", 
           2004, 417, nil]

article.map(&:to_s).zip(SEPARATORS).map(&:join).join
  # => "Ruby for Fun and Profit Matz. Cool Tools for Coders 2004;417:"