我正在从许多组件(标题,作者,期刊,年份,期刊卷,期刊页面)生成一个字符串。这个想法是字符串将是一个引用:
@citation = article_title + " " + authors + ". " + journal + " " + year + ";" + journal_volume + ":" + journal_pages
我猜有些组件偶尔不存在。我收到了这个错误:
no implicit conversion of nil into String
这是否表明它正在尝试构建字符串,其中一个组件是nil
?如果是这样,有没有一种巧妙的方法来从数组构建一个字符串,同时检查每个元素是否存在以避免这个问题?
答案 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:"