我的代码有什么问题?我一直收到错误"No implicit conversion from string to array (TypeError)"


似乎是

问题的部分是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

我想做的是缩写这样的单词 "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

它产生abbreviate "abcd-abcd" => "a2d-a2d"

相关内容

最新更新