第二个命令不执行 array.map

Second command does not execute array.map

我在下面有这段代码,我的最后一个 elsif 语句有两个命令。问题是当我 运行 代码时,只执行第一个命令。

例如,如果我 运行 翻译("banana"),它 returns bananabay,正确地将“#{x[0]}ay”添加到数组 banana,但是,第二个删除 x[0] 的命令没有执行,我将 bananabay 作为 return 而不是预期的 ananabay。

你认为发生了什么?

代码在这里:

def translate(word)
  vowels = ["a","e","i","o","u"]
  consonants = ["b","c","d","f","g","h","j","k","l","m","n","p","q","r","s","t","v","w","x","y","z"]

  word = word.split

  word.map{ |x|
    if vowels.include? x[0]
      x=x << "ay"
    elsif consonants.include? x[0] && x[1]
      "#{x[2..-1]}#{x[0]}#{x[1]}ay"
    elsif consonants.include? x[0]
      x = x << "#{x[0]}ay"
      x.delete(x[0])
      x
    end 
  }.join(" ")
end

字符串未更改是因为 #delete 在调用时不会改变原始输入 - 它 returns 反映结果的新字符串。

要解决此问题,您可以调用 #delete!,这将修改字符串,或者您可以将 delete 方法的结果分配回 x:

x = x.delete(x[0])

但是,这将从您的字符串中删除 所有 x[0] 实例(例如 "banana" 将变为 "ananaay")- 我不不要认为这就是您希望函数执行的操作。

如果你只想删除目标字母的第一个实例,你可以调用#sub,像这样:

x = x.sub(x[0], "")

希望对您有所帮助!