我在下面有这段代码,我的最后一个elsif语句有两个命令。 问题是当我运行代码时,只执行第一个命令。
例如,如果我运行 translate("banana"(,它会返回 bananabay,正确地将"#{x[0]}ay"添加到数组 banana 但是,删除 x[0] 的第二个命令没有执行,我得到了 bananabay 作为返回而不是预期的 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
调用时不会更改原始输入 - 它返回反映结果的新字符串。
要解决此问题,您可以调用 #delete!
,这将就地修改字符串,或者您可以将 delete 方法的结果分配回 x
:
x = x.delete(x[0])
但是,这将从字符串中删除所有x[0]
实例(例如"banana"会变成"ananaay"(-我认为这不是您希望函数执行的操作。
如果您只想删除目标字母的第一个实例,则可以调用 #sub
,如下所示:
x = x.sub(x[0], "")
希望这有帮助!