.select main:Object的未定义方法(NoMethodError)Ruby

时间:2018-12-17 22:07:12

标签: ruby select syntax

尝试创建一种从数组中删除单个空格元素(如果旁边没有单个空格)的方法(不带双空格)。当我运行以下命令时,出现此错误:

ex5.rb:5:block in remove_double_spaces': undefined method数组中的main:Object(NoMethodError) 你的意思是?数组

我猜这是一个可变范围问题?如何在select方法中调用数组本身?

我的逻辑在下面尝试(选择数组的所有元素,除非它是一个空白元素,并且下一个元素也是一个空白)。

def remove_double_spaces(array)
  # p array.index('w') works fine here.
  array.select { |value| value unless (value == ' ') && (array(array.index(value) + 1) != ' ') }
end

remove_double_spaces([" ", " ", " ", "w", "h", "a", "t", " ", "s", " ", "m", "y", " ", " ", " ", " ", " ", "l", "i", "n", "e", " "])

2 个答案:

答案 0 :(得分:2)

您可以改为执行此操作。 array.map(&:squeeze)

答案 1 :(得分:1)

要消除错误,只需将array(array.index(value) + 1)替换为array[array.index(value) + 1]

但是解决方案仍然不正确。数组的方法index返回array first 对象的索引,以使该对象==到value。如果array中的元素重复,则会出现错误。

我建议将您的方法重写为

def remove_double_spaces(array)
  array.join.squeeze(' ').split('')
end

remove_double_spaces([" ", " ", " ", "w", "h", "a", "t", " ", "s", " ", "m", "y", " ", " ", " ", " ", " ", "l", "i", "n", "e", " "])
# => [" ", "w", "h", "a", "t", " ", "s", " ", "m", "y", " ", "l", "i", "n", "e", " "]