关于-array索引和范围的Ruby语句混淆

时间:2013-05-06 19:34:06

标签: ruby-on-rails ruby

我有一个text_parts变量,填充如下:

text_parts = r[:database_field].split('.')

text_parts现在有一个单词数组,这些单词实际上是按数据库中的句点分割的。以下陈述在红宝石中意味着什么?我在旧的代码库中找到它并需要解释它的作用。

text_parts[-3].nil? ? "" : text_parts[-1*text_parts.length..-3].join('.')

提前谢谢。

1 个答案:

答案 0 :(得分:2)

从第一个元素到{3}的元素从最后一个元素到第三个元素,并将它们与text_parts连接起来(如果"."少于三个元素,则返回一个空字符串)。

显然不是由(任何有资格成为专业人士)的人编写的代码。这非常糟糕。

  • 首先,由于确保text_parts的所有元素都是字符串,因此您无需考虑某些元素为text_partsnil的情况。因此,您不需要使用false。条件可以是nil?,两个案例都已切换。
  • 其次,text_parts[-3] ? ... : ...应该简单地写成-1*text_parts.length
  • 第三,如果0小于3,那么text_parts将是一个空数组,因此首先不需要条件。

简而言之,更好的方法是:

text_parts[0..-3]