Ruby 我的代码有什么问题?我不断地犯错误;没有从字符串到数组的隐式转换(TypeError)";

Ruby 我的代码有什么问题?我不断地犯错误;没有从字符串到数组的隐式转换(TypeError)";,ruby,Ruby,问题似乎出在if语句的第一部分,因为else部分正在工作: def self.abbreviate(string) if string.match("-") array = string.split("-") array.each do |word| if word.length > 3 word.gsub!(/\w+/, "#{word[0]}#{word.length - 2}#{word[word.length - 1]}")

问题似乎出在
if
语句的第一部分,因为
else
部分正在工作:

def self.abbreviate(string)
  if string.match("-")
    array = string.split("-")
    array.each do |word|
      if word.length > 3
          word.gsub!(/\w+/, "#{word[0]}#{word.length - 2}#{word[word.length - 1]}")
      end
    end
  else
    string.gsub!(/\w+/, "#{string[0]}#{string.length - 2}#{string[string.length - 1]}")
  end
end

我想做的是缩写一些单词,比如so
“banana”=>“b4a”
“hackers”=>“h5s”
。这也必须适用于连字号的单词,如
“double barrel”=>“d4e-b4l”

您的问题可能在于调用方代码,前提是函数为不带
-
的单词返回字符串,并为具有该字符串的单词返回数组:

abbreviate 'abc' => "a1c"
abbreviate 'abc-abc' => ["abc", "abc"]
但对于您试图做的事情,以下内容似乎更合适:

def self.abbreviate(string)
  string.split("-").map{|s|
    s.length > 2 ? "#{s[0]}#{s.size-2}#{s[-1]}" : s
  }.join('-')
end

它会产生缩写“abcd abcd”=>“a2d-a2d”

您能提供一个失败的例子吗?