我的代码出了什么问题?我一直收到错误“没有从字符串到数组的隐式转换(TypeError)”

时间:2016-02-13 19:33:36

标签: ruby

似乎问题的部分是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"这样的字词。这也适用于import socket s = socket.socket() host = '103.47.59.130' port = 80 s.connect((host, port)) while True: print "From Server: ", s.recv(1024) #This gets printed after sometime s.send(raw_input("Client please type: ")) s.close()

等带连字符的单词

1 个答案:

答案 0 :(得分:0)

您的问题可能出在调用者代码中,前提是函数返回没有-的单词的字符串和一个包含它的数组:

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"

相关问题